如何在 Python 中将名词列表分类为抽象名词或具体名词?
例如:
"Have a seat in that chair."
在上面的句子中,chair
是名词,可以归类为具体。
最佳答案
我建议使用预训练词向量训练分类器。
您需要两个库:spacy
用于标记文本和提取词向量,以及 scikit-learn
用于机器学习:
import spacy
from sklearn.linear_model import LogisticRegression
import numpy as np
nlp = spacy.load("en_core_web_md")
区分具体名词和抽象名词是一项简单的任务,因此您可以用很少的示例训练模型:
classes = ['concrete', 'abstract']
# todo: add more examples
train_set = [
['apple', 'owl', 'house'],
['agony', 'knowledge', 'process'],
]
X = np.stack([list(nlp(w))[0].vector for part in train_set for w in part])
y = [label for label, part in enumerate(train_set) for _ in part]
classifier = LogisticRegression(C=0.1, class_weight='balanced').fit(X, y)
当您拥有经过训练的模型时,您可以将其应用于任何文本:
for token in nlp("Have a seat in that chair with comfort and drink some juice to soothe your thirst."):
if token.pos_ == 'NOUN':
print(token, classes[classifier.predict([token.vector])[0]])
结果看起来令人满意:
# seat concrete
# chair concrete
# comfort abstract
# juice concrete
# thirst abstract
您可以通过将模型应用于不同的名词、发现错误并将它们添加到正确标签下的训练集来改进模型。
关于python - 使用 NLTK 或类似工具将名词分类为抽象名词或具体名词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28575082/