Skip to content

Commit c6ac08c

Browse files
committed
better fix
1 parent 98ec538 commit c6ac08c

1 file changed

Lines changed: 26 additions & 32 deletions

File tree

mathics/builtin/natlang.py

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -103,38 +103,31 @@ def generator(doc):
103103

104104
return forms
105105

106+
# the following two may only be accessed after_WordNetBuiltin._load_wordnet has
107+
# been called.
108+
109+
_wordnet_pos_to_type = {}
110+
_wordnet_type_to_pos = {}
111+
106112
try:
107113
import nltk
108114

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.')
115+
def _init_nltk_maps():
116+
_wordnet_pos_to_type.update({
117+
nltk.corpus.wordnet.VERB: 'Verb',
118+
nltk.corpus.wordnet.NOUN: 'Noun',
119+
nltk.corpus.wordnet.ADJ: 'Adjective',
120+
nltk.corpus.wordnet.ADJ_SAT: 'Adjective',
121+
nltk.corpus.wordnet.ADV: 'Adverb',
122+
})
123+
_wordnet_type_to_pos.update({
124+
'Verb': [nltk.corpus.wordnet.VERB],
125+
'Noun': [nltk.corpus.wordnet.NOUN],
126+
'Adjective': [nltk.corpus.wordnet.ADJ, nltk.corpus.wordnet.ADJ_SAT],
127+
'Adverb': [nltk.corpus.wordnet.ADV],
128+
})
129+
except ImportError:
130+
pass
138131

139132
try:
140133
import spacy
@@ -782,6 +775,7 @@ def _language_name(self, evaluation, options):
782775
def _init_wordnet(self, evaluation, language_name, language_code):
783776
try:
784777
wordnet_resource = nltk.data.find('corpora/wordnet')
778+
_init_nltk_maps()
785779
except LookupError:
786780
evaluation.message(self.get_name(), 'package', 'wordnet')
787781
return None
@@ -852,7 +846,7 @@ def containers():
852846
for lemma in WordProperty._synonymous_lemmas(syn):
853847
yield lemma.name()
854848

855-
return what, _wordnet_pos_to_type(pos), containers
849+
return what, _wordnet_pos_to_type[pos], containers
856850

857851
@staticmethod
858852
def syn(syn, wordnet, language_code):
@@ -1009,7 +1003,7 @@ def _words(self, language_name, type, evaluation):
10091003
if type == 'All':
10101004
filtered_pos = [None]
10111005
else:
1012-
filtered_pos = _wordnet_type_to_pos(type)
1006+
filtered_pos = _wordnet_type_to_pos[type]
10131007
words = []
10141008
for pos in filtered_pos:
10151009
words.extend(list(wordnet.all_lemma_names(pos, language_code)))
@@ -1083,7 +1077,7 @@ def _parts_of_speech(self, py_word, wordnet, language_code):
10831077
if not parts:
10841078
return Expression('Missing', 'NotAvailable')
10851079
else:
1086-
return Expression('List', *[String(s) for s in sorted([_wordnet_pos_to_type(p) for p in parts])])
1080+
return Expression('List', *[String(s) for s in sorted([_wordnet_pos_to_type[p] for p in parts])])
10871081

10881082
def _property(self, word, py_property, py_form, evaluation, options):
10891083
if py_property == 'PorterStem':

0 commit comments

Comments
 (0)