use*_*977 11 nlp nltk wordnet python-2.7
我试图通过使用nltk pos_tag来得到一个单词是单数形式还是复数形式.但结果并不准确.
所以,我需要一种方法来找到一个单词是单数形式还是复数形式?而且我需要它而不使用任何python包.
alv*_*vas 11
对于英语,每个单词都应该以某种方式具有根引理,其中默认多数是单数.
假设你的列表中只有名词,你可以试试这个:
from nltk.stem import WordNetLemmatizer
wnl = WordNetLemmatizer()
def isplural(word):
lemma = wnl.lemmatize(word, 'n')
plural = True if word is not lemma else False
return plural, lemma
nounls = ['geese', 'mice', 'bars', 'foos', 'foo',
'families', 'family', 'dog', 'dogs']
for nn in nounls:
isp, lemma = isplural(nn)
print nn, lemma, isp
Run Code Online (Sandbox Code Playgroud)
您将有当字超出共发现的问题,那么你必须使用更多的sophiscated 分类或有限状态机出来的NLTK.
假设您需要一个英语解决方案,您可以使用pattern-en更直接地执行与2er0解决方案类似的操作:
from pattern.en import singularize
def isplural(pluralForm):
singularForm = singularize(pluralForm)
plural = True if pluralForm is not singularForm else False
return plural, singularForm
nounls = ['geese', 'mice', 'bars', 'foos', 'foo',
'families', 'family', 'dog', 'dogs']
for pluralForm in nounls:
isp, singularForm = isplural(pluralForm)
print pluralForm, singularForm, isp
Run Code Online (Sandbox Code Playgroud)
哪个输出
geese goose True
mice mouse True
bars bar True
foos foo True
foo foo False
families family True
family family False
dog dog False
dogs dog True
Run Code Online (Sandbox Code Playgroud)
2er0解决方案与此之间唯一的输出差异是
foos foo True
Run Code Online (Sandbox Code Playgroud)
因为他的解决方案输出False,因为他指出,因为foos不是在wordnet(而不是英语单词).
| 归档时间: |
|
| 查看次数: |
7389 次 |
| 最近记录: |