【问题标题】:Is there a way to remove proper nouns from a sentence using python?有没有办法使用python从句子中删除专有名词?
【发布时间】:2016-09-22 17:39:39
【问题描述】:

是否有任何软件包可用于使用 Python 从句子中删除专有名词?

我知道一些包,如 NLTK、Stanford 和 Text Blob,它们可以完成这项工作(删除名称),但它们也删除了很多以大写字母开头但不是专有名词的单词。

另外,我不能有一个名称字典,因为它会很大,并且会随着数据不断填充到数据库中而不断扩展。

【问题讨论】:

  • 这可能会有所帮助:stackoverflow.com/questions/17669952/…
  • 将此标记为重复(您昨天问了同样的问题):stackoverflow.com/q/39610137/6313992
  • 嗨 Neeraj,这就是我解释的。它甚至认为以大写字母开头的单词也视为专有名词,甚至不是专有名词的单词
  • 您只想删除单个单词吗?或者命名实体呢?
  • 我很想使用字典网络服务来查找单词,如果它们不属于名词、动词、形容词等,它们就是名词......不知道我怎么做d去实施它。正如你所说,字典会很大,但它确实在一定程度上已经存在。

标签: python python-2.7


【解决方案1】:

如果您只想删除属于专有名词的单个单词,可以使用nltk 并标记您的句子,然后删除所有带有专有名词标记的单词。

>>> import nltk
>>> nltk.tag.pos_tag("I am named John Doe".split())
[('I', 'PRP'), ('am', 'VBP'), ('named', 'VBN'), ('John', 'NNP'), ('Doe', 'NNP')]

默认标注器使用Penn Treebank POS tagset,它只有两个专有名词标签:NNPNNPS

所以您可以执行以下操作:

>>> sentence = "I am named John Doe"
>>> tagged_sentence = nltk.tag.pos_tag(sentence.split())
>>> edited_sentence = [word for word,tag in tagged_sentence if tag != 'NNP' and tag != 'NNPS']
>>> print(' '.join(edited_sentence))
I am named

现在,作为警告,POS tagging 并非 100% 准确,并且可能会误标一些模棱两可的词。此外,您不会以这种方式捕获Named Entities,因为它们本质上是多字的。

【讨论】:

  • 这在一定程度上有所帮助,但并不完全。另外,有没有办法删除文本中的电子邮件内容?
  • 电子邮件内容是什么意思?也许你可以更新你的问题?还有,它没有删除什么?
  • 它删除了名称,但也删除了以大写字母开头的单词。可能也将它们视为专有名词。
  • 大写首字母是用于NER 的功能。听起来您需要定义用例并提交另一个更具体的问题。
猜你喜欢
  • 2019-07-08
  • 2016-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多