所以我在文本文件中有一个单词列表。我想对它们进行词形还原以删除具有相同含义但时态不同的单词。比如尝试、尝试等。当我这样做时,我不断收到类似 TypeError: unhashable type: 'list' 的错误
results=[]
with open('/Users/xyz/Documents/something5.txt', 'r') as f:
for line in f:
results.append(line.strip().split())
lemma= WordNetLemmatizer()
lem=[]
for r in results:
lem.append(lemma.lemmatize(r))
with open("lem.txt","w") as t:
for item in lem:
print>>t, item
如何对已经是标记的单词进行词形还原?
最佳答案
WordNetLemmatizer.lemmatize
方法可能需要一个字符串,但您向它传递的是一个字符串列表。这会给您 TypeError
异常。
line.split()
的结果是一个字符串列表,您将其作为列表附加到 results
,即列表的列表。
您想使用 results.extend(line.strip().split())
results = []
with open('/Users/xyz/Documents/something5.txt', 'r') as f:
for line in f:
results.extend(line.strip().split())
lemma = WordNetLemmatizer()
lem = map(lemma.lemmatize, results)
with open("lem.txt", "w") as t:
for item in lem:
print >> t, item
或在没有中间结果列表的情况下重构
def words(fname):
with open(fname, 'r') as document:
for line in document:
for word in line.strip().split():
yield word
lemma = WordNetLemmatizer()
lem = map(lemma.lemmatize, words('/Users/xyz/Documents/something5.txt'))
关于python - 单词列表的词形还原,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34058853/