python - 使用 NLTK 或类似工具将名词分类为抽象名词或具体名词

标签 python nlp nltk

如何在 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/

相关文章:

python - 雪球词干提取器 : poor french stemming

language-agnostic - 从句子中提取 'useful'信息?

python - 如何在 python 中导入 hbase?

python - argmax 用于沿某个轴的多维数组

python - 仅格式更新是一个无聊的 Git 提交吗?

Python:如何在用分号分隔的 Pandas 数据框的列中查找值?

algorithm - 测量两个短语之间的语义相似度

machine-learning - 无法训练我的 keras 模型 : (Data cardinality is ambiguous:)

python - 使用python从pdf中获取文本数据

python - 使用 NLTK 和 Python 从文本文件中读写 POS 标记的句子