Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python NLTK WordNetLemmatizer过程“;美国";作为「;u";_Python_Nltk_Lemmatization - Fatal编程技术网

Python NLTK WordNetLemmatizer过程“;美国";作为「;u";

Python NLTK WordNetLemmatizer过程“;美国";作为「;u";,python,nltk,lemmatization,Python,Nltk,Lemmatization,如果您将单词“US”(美国)在预处理后(变成“US”,即小写)从packagenltk.stem输入WordNetLemmatizer,它将被翻译成“u”。例如: from nltk.stem import WordNetLemmatizer lmtzr = WordNetLemmatizer() word = "US".lower() # "US" becomes "us" lemma = lmtzr.lemmatize(word) print(lemma) # prints "u"

如果您将单词
“US”
(美国)在预处理后(变成
“US”
,即小写)从package
nltk.stem
输入
WordNetLemmatizer
,它将被翻译成
“u”
。例如:

from nltk.stem import WordNetLemmatizer
lmtzr = WordNetLemmatizer()
word = "US".lower()  #  "US" becomes "us"
lemma = lmtzr.lemmatize(word)
print(lemma)  # prints "u"
我甚至尝试使用词性标记对单词进行语法化,结果是根据包
nltk
中的
POS\u tag()
函数生成一个
'NNP'
(NN=noon和p=property,即property noon)。但是
'NNP'
是一个
wordnet.NOUN
,这是lemmatizer处理单词时的默认行为。因此,
lmtzr.lemmatize(word)
lmtz.lemmatize(word,wordnet.NOUN)
是相同的(其中
wordnet
是从包
nltk.stem.wordnet
导入的)


除了使用
if
语句将文本中的单词
“us”
的处理明确排除在lemmatizer之外,关于如何解决这个问题的任何想法?

如果您查看WordNetLemmatizer的源代码

def lemmatize(self, word, pos=NOUN):
    lemmas = wordnet._morphy(word, pos)
    return min(lemmas, key=len) if lemmas else word
wordnet.\u morphy
返回
['us','u']

min(引理,key=len)
返回最短的单词,即
u

wordnet.\u morphy
对名词使用一条规则,将结尾
“s”
替换为

以下是替换列表

[('s',''),
(‘ses’、‘s’),
('ves','f'),
('x','x'),
('zes','z'),
("ches","ch"),,
(‘shes’、‘sh’),
(‘男人’、‘男人’),
('yes','y')]

我看不出一条干净的出路

1) 你可以写一条排除所有大写单词的特殊规则

2) 或者您可以添加一行
us

到文件
nltk_data/corpora/wordnet/noon.exc

3) 您可以编写自己的函数来选择最长的单词(这对于其他单词可能是错误的)

from nltk.corpus.reader.wordnet import NOUN
from nltk.corpus import wordnet
def lemmatize(word, pos=NOUN):
    lemmas = wordnet._morphy(word, pos)
    return max(lemmas, key=len) if lemmas else word