3

嗨,下面是我的代码,用于删除停用词并获取包含技术相关术语(如 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 实体,所以我没有得到准确的结果,所以请建议我如何为我的文本获取正确的命名实体

谢谢

4

1 回答 1

1

晚了,但这里。此外,这不是解决方案,更多的是对问题的解释,并试图为读者指明正确的方向。希望这可以帮助某人。

NLTK 在该模块中使用了停用词词典,因此不会过滤您要查找的所有内容。您必须考虑为您的单词分配POS 标签并过滤与您的问题无关的类型。

但是,您正在寻找既可以是名词又可以是专有名词的术语。因此,Java 和 Ian 都会通过。问题是 POS 标签不包含您正在寻找的额外信息,即这些词应该与技术相关。

这是一个非常难以高精度解决的问题,因为您需要从文本中推断出上下文。这是当前自然语言处理(NLP)和机器学习领域的一个研究问题。

可能的解决方案可能包含以下一些技术。

  • 您可以开始构建自己的停用词列表,方法是在发现单词时将它们添加到列表中(在 POS 标签过滤之后)。这很乏味且容易出错,但比其他方法更简单。

  • 您可以查看 NLP 中称为名称实体解析的方法。

  • 另外,查看 Goolge 的 Ngram corpus viewer。他们用它做了一些有趣的事情。

于 2014-04-23T08:43:08.693 回答