下面是我的代码,用于删除停用词并获取包含技术相关术语(如java,lan,port,socket等)的文本命名实体
import nltk
from nltk.corpus import stopwords
import codecs
import os
import base64
def stop_final():
result=[]
text="some technology related text"
text = nltk.word_tokenize(text)
for word in text:
if word not in stopwords.words('english'):
result.append(word)
print nltk.ne_chunk(nltk.pos_tag(result))
stop_final()
从上面的代码我得到lan,socket等的Person实体,所以我没有得到准确的结果,所以请建议我如何为我的文本获得正确的命名实体
由于
答案 0 :(得分:1)
迟到了,但是到了。此外,这不是解决方案,更多是对问题的解释,并试图将读者指向正确的方向。希望这有助于某人。
NLTK在该模块中使用停用词词典,因此不会过滤您要查找的所有内容。您必须考虑为您的文字分配POS tags并过滤与您的问题无关的类型。
但是,您正在寻找可以是名词和专有名词的术语。因此,Java和Ian都会通过。问题是POS标签不包含您正在寻找的额外信息,即单词应与技术相关。
这是一个非常难以解决的高精度问题,因为您需要从文本中推断出上下文。这是自然语言处理(NLP)和机器学习领域的当前研究问题。
可能的解决方案可能包含以下一些技术。
您可以开始构建自己的停用词列表,方法是在发现它们时向列表中添加单词(在POS标记过滤后)。这很乏味且容易出错,但比替代方案简单。
您可以查看NLP中称为名称 - 实体解析的方法。
此外,结帐Goolge's Ngram corpus viewer。他们做了一些有趣的事情。