自然语言过程:发现文本类别?

时间:2014-01-04 06:27:41

标签: nlp

存在哪个库让您确定一个充满文本的列是否是基于列表的特定实体?

例如,鉴于许多列表包含用于训练的文本字符串(每个列表可能很少有异常字符串是噪声),我想为该列表建立一些类别。

现在当给出一个新的文本字符串时,我想知道它属于哪个类别或实体。

你在自然语言处理中称之为什么?

4 个答案:

答案 0 :(得分:1)

named-entity recognition可能接近你想要的。

答案 1 :(得分:1)

您要做的是对电话号码,电子邮件,地址等内容进行文本标记的组合,其中类型由其格式标识。以及那些只能通过某种背景知识来确定的人和商业名称之类的实体识别。

根据您要使用的计算机语言,我建议您首先查看NLTK library,该文档已有详细记录,并为该域中的初学者提供相应的入门手册:Natural Language Processing with Python

答案 2 :(得分:1)

您可以使用nltk.chunk.ne_chunk()

>>> from nltk.tokenize import word_tokenize
>>> from nltk.chunk import ne_chunk
>>> from nltk.tag import pos_tag
>>> from nltk.tree import Tree

>>> txt = 'Michael Jackson is eating at McDonalds, call him at +99-20392842'
# Get full tree of with Name Entities (NEs) chunks.

>>> ne_chunk(pos_tag(word_tokenize(txt)))
Tree('S', [Tree('PERSON', [('Michael', 'NNP')]), Tree('PERSON', [('Jackson', 'NNP')]), ('is', 'VBZ'), ('eating', 'VBG'), ('at', 'IN'), Tree('ORGANIZATION', [('McDonalds', 'NNP')]), (',', ','), ('call', 'NN'), ('him', 'PRP'), ('at', 'IN'), ('+99-20392842', '-NONE-')])

# Get only the NEs.
>>> [i for i in ne_chunk(pos_tag(word_tokenize(txt))) if isinstance(i, Tree)]
[Tree('PERSON', [('Michael', 'NNP')]), Tree('PERSON', [('Jackson', 'NNP')]), Tree('ORGANIZATION', [('McDonalds', 'NNP')])]

# Get only PERSON NEs
>>> [i for i in ne_chunk(pos_tag(word_tokenize(txt))) if isinstance(i, Tree) and i.node == 'PERSON']
[Tree('PERSON', [('Michael', 'NNP')]), Tree('PERSON', [('Jackson', 'NNP')])]

答案 3 :(得分:1)

这个问题并没有明确说明,但是我认为您要尝试的是根据文本的特征进行所谓的文本分类。虽然“实体”一词可能暗示了词性标记,但“类别”一词却暗示了多类分类。我将选择后者。

如果我这样理解正确,那么您的训练集如下所示:

    label          text
0 'category_a'   'foo foo foo foo'
1 'category_a'   'foo foo bar'
2 'category_b'   'bar bar bar'

您想根据每个文本的基础组成部分来预测它们的标签。 在机器学习中,这是监督机器学习的典型问题。 我建议您看看sklearn中的CountVectorizer和TfidfVectorizer构造函数,您可以在这里找到:

CountVectorizer:http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html

TfidfVectorizer:http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html

分类任务通常由以下两个管道之一执行:用于矢量化的管道,再加上适当的分类器(例如,多项朴素贝叶斯)进行分类。 如果您添加有关任务的更多详细信息,则可以提供更准确的帮助。