Skip to content

Commit 98ec538

Browse files
committed
fixes nltk loading problem
1 parent 2b3ef05 commit 98ec538

1 file changed

Lines changed: 31 additions & 18 deletions

File tree

mathics/builtin/natlang.py

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -106,22 +106,35 @@ def generator(doc):
106106
try:
107107
import nltk
108108

109-
_wordnet_pos_to_type = {
110-
nltk.corpus.wordnet.VERB: 'Verb',
111-
nltk.corpus.wordnet.NOUN: 'Noun',
112-
nltk.corpus.wordnet.ADJ: 'Adjective',
113-
nltk.corpus.wordnet.ADJ_SAT: 'Adjective',
114-
nltk.corpus.wordnet.ADV: 'Adverb',
115-
}
116-
_wordnet_type_to_pos = {
117-
'Verb': [nltk.corpus.wordnet.VERB],
118-
'Noun': [nltk.corpus.wordnet.NOUN],
119-
'Adjective': [nltk.corpus.wordnet.ADJ, nltk.corpus.wordnet.ADJ_SAT],
120-
'Adverb': [nltk.corpus.wordnet.ADV],
121-
}
122-
except ImportError:
123-
_wordnet_pos_to_type = {}
124-
_wordnet_type_to_pos = {}
109+
_lazy_wordnet_pos_to_type = {}
110+
_lazy_wordnet_type_to_pos = {}
111+
112+
def _wordnet_pos_to_type(p):
113+
if not _lazy_wordnet_pos_to_type:
114+
_lazy_wordnet_pos_to_type.update({
115+
nltk.corpus.wordnet.VERB: 'Verb',
116+
nltk.corpus.wordnet.NOUN: 'Noun',
117+
nltk.corpus.wordnet.ADJ: 'Adjective',
118+
nltk.corpus.wordnet.ADJ_SAT: 'Adjective',
119+
nltk.corpus.wordnet.ADV: 'Adverb',
120+
})
121+
return _lazy_wordnet_pos_to_type[p]
122+
123+
def _wordnet_type_to_pos(t):
124+
if not _lazy_wordnet_type_to_pos:
125+
_lazy_wordnet_type_to_pos.update({
126+
'Verb': [nltk.corpus.wordnet.VERB],
127+
'Noun': [nltk.corpus.wordnet.NOUN],
128+
'Adjective': [nltk.corpus.wordnet.ADJ, nltk.corpus.wordnet.ADJ_SAT],
129+
'Adverb': [nltk.corpus.wordnet.ADV],
130+
})
131+
return _lazy_wordnet_type_to_pos[t]
132+
except (ImportError, LookupError):
133+
def _wordnet_pos_to_type(p):
134+
raise ValueError('Needed NLTK corpora are not installed.')
135+
136+
def _wordnet_type_to_pos(t):
137+
raise ValueError('Needed NLTK corpora are not installed.')
125138

126139
try:
127140
import spacy
@@ -839,7 +852,7 @@ def containers():
839852
for lemma in WordProperty._synonymous_lemmas(syn):
840853
yield lemma.name()
841854

842-
return what, _wordnet_pos_to_type[pos], containers
855+
return what, _wordnet_pos_to_type(pos), containers
843856

844857
@staticmethod
845858
def syn(syn, wordnet, language_code):
@@ -996,7 +1009,7 @@ def _words(self, language_name, type, evaluation):
9961009
if type == 'All':
9971010
filtered_pos = [None]
9981011
else:
999-
filtered_pos = _wordnet_type_to_pos[type]
1012+
filtered_pos = _wordnet_type_to_pos(type)
10001013
words = []
10011014
for pos in filtered_pos:
10021015
words.extend(list(wordnet.all_lemma_names(pos, language_code)))

0 commit comments

Comments
 (0)