在python中正确使用NTLK
我正在尝试将python与NTLK结合使用,以获得许多单词的首字母缩略词(目前为2)。看来我可以用第一个词来表达,但第二个词不行。我猜关于NTLK我还有很多东西要学。下面是一些简化的示例代码。我基本上是想得到两个缩略语列表,每个单词一个列表。第一个for循环一切顺利。在我尝试了第二个词之后,我得到了:在python中正确使用NTLK,python,nltk,Python,Nltk,我正在尝试将python与NTLK结合使用,以获得许多单词的首字母缩略词(目前为2)。看来我可以用第一个词来表达,但第二个词不行。我猜关于NTLK我还有很多东西要学。下面是一些简化的示例代码。我基本上是想得到两个缩略语列表,每个单词一个列表。第一个for循环一切顺利。在我尝试了第二个词之后,我得到了: syn2 = wn.synsets(word)[0].lemmas[y] IndexError: list index out of range 希望有人能帮助我理解为什么会发生这种情况 imp
syn2 = wn.synsets(word)[0].lemmas[y]
IndexError: list index out of range
希望有人能帮助我理解为什么会发生这种情况
import nltk
from nltk.corpus import wordnet as wn
import string
from array import *
syn1 = ''
syn2 = ''
mylist = []
mylist2 = []
mylist3 = []
Web_Keywd = 'car loan'
wuser_words = Web_Keywd.split()
for word in wuser_words:
i=i+1
#first
if (i == 1) :
synset1 = wn.synsets(word)
y = 0
for synset in synset1:
syn1 = wn.synsets(word)[0].lemmas[y]
syn1 = syn1.name
mylist2.append(syn1)
y=y+1
if (i == 2) :
y = 0
for synset2 in wn.synsets(word):
syn2 = wn.synsets(word)[0].lemmas[y]
syn2 = syn2.name
mylist3.append(syn2)
y=y+1
在我之前的回答中,我可能使用了
wn.synsets(word)[0]。引理[y]
,误导了您。您需要显式地在引理上循环,因为您无法预先知道有多少引理。示例用例:
Web_Keywd = 'car loan cheap'
results = {}
for word in Web_Keywd.split():
for synset in wn.synsets(word):
for lemma in synset.lemmas:
results.setdefault(word, []).append(lemma.name)
结果现在如下所示:
{'car': ['car', 'auto', 'automobile', 'machine'...],
'loan': ['loan', 'loanword', 'loan', 'lend', 'loan'...],
'cheap': ['cheap', 'inexpensive', 'brassy', 'cheap...]}
要为提交的每个单词获得独立于其他单词的唯一结果,请执行以下操作:
要获取提交的所有单词的唯一单词列表,请执行以下操作:
Web_Keywd = 'car loan cheap'
words = set(Web_Keywd.split())
results = set(
lemma.name
for word in words
for synset in wn.synsets(word)
for lemma in synset.lemmas
)
# results -> {'loanword', 'tatty', 'automobile', 'cheap', 'chinchy',...
在我之前的回答中,我可能使用了wn.synsets(word)[0]。引理[y]
,误导了您。您需要显式地在引理上循环,因为您无法预先知道有多少引理。示例用例:
Web_Keywd = 'car loan cheap'
results = {}
for word in Web_Keywd.split():
for synset in wn.synsets(word):
for lemma in synset.lemmas:
results.setdefault(word, []).append(lemma.name)
结果现在如下所示:
{'car': ['car', 'auto', 'automobile', 'machine'...],
'loan': ['loan', 'loanword', 'loan', 'lend', 'loan'...],
'cheap': ['cheap', 'inexpensive', 'brassy', 'cheap...]}
要为提交的每个单词获得独立于其他单词的唯一结果,请执行以下操作:
要获取提交的所有单词的唯一单词列表,请执行以下操作:
Web_Keywd = 'car loan cheap'
words = set(Web_Keywd.split())
results = set(
lemma.name
for word in words
for synset in wn.synsets(word)
for lemma in synset.lemmas
)
# results -> {'loanword', 'tatty', 'automobile', 'cheap', 'chinchy',...
谢谢,这有点帮助。当我进入一个列表wordlist.append(results.get(“car”))时,我注意到主单词“car”似乎重复了好几次。有没有办法解决这个问题?谢谢,这似乎很有效(至少在大部分情况下)。不过,当我搜索“猫”时,似乎得到了一些意想不到的结果。我得到的结果像呕吐、净化、盖伊等等。我不知道这些话是如何为猫返回的。另外,在在线词典中,我看到返回的单词,如bobcat、kitty等,我希望在ntlk结果中看到它们(但不是)。想知道这是为什么吗?谢谢这有点帮助。当我进入一个列表wordlist.append(results.get(“car”))时,我注意到主单词“car”似乎重复了好几次。有没有办法解决这个问题?谢谢,这似乎很有效(至少在大部分情况下)。不过,当我搜索“猫”时,似乎得到了一些意想不到的结果。我得到的结果像呕吐、净化、盖伊等等。我不知道这些话是如何为猫返回的。另外,在在线词典中,我看到返回的单词,如bobcat、kitty等,我希望在ntlk结果中看到它们(但不是)。不知你是否知道这是为什么?