我应该阻止域名单词进行命名实体识别吗?

时间:2017-09-15 11:41:00

标签: python nlp nltk stemming

我的问题可能不完全是编程,但我知道很多才华横溢的程序员正在做NLP并且可能能够回答我的问题。

我编写了一个带有域名的文档,我执行模糊匹配以提取文本中的命名实体。格式如下:

  "ferry names": [
    {
      "stena danica": [
        "stena danica",
        "danica"
      ]
    },

外部对象是类别,内部是实体。最里面的列表是可以被实体调用的同义词列表。 现在,我的命名实体识别,虽然简单,但效果很好。为了使它更容易,我决定阻止传入文本的所有单词。

{
  "category": "ferry names",
  "distance": 1,
  "entity": "stena danica",
  "interpreted": "stena danica",
  "raw": "stena danica",
  "stemmed": "stena danic"
}

词干分析器(nltk雪球词干分析器,SwedishStemmer)工作得非常出色,但它也会产生域名,在这种情况下,Stena Danica

问题:我不确定如何解决这个问题,我是否应该干掉域名词,或者将词干版本与同义词放在一起? 实际上,它仍然会被模糊匹配器拾取,但它可能会引入问题。谢谢。

2 个答案:

答案 0 :(得分:2)

您的问题实际上只有一个答案:尝试两种方式,对其进行测试(对您未用于培训的数据),并选择最适合的方式。

一般来说,最好的方法取决于领域,培训数据的数量,等等等等,试一试并找出答案。没有人可以肯定地预测它。

答案 1 :(得分:1)

我可能不是最有资格回答此问题的人,但我看到的方式,取决于你的目标。我使用NLTK对我的文本执行词干来减少我的总词汇量(创建文档向量并根据文档内容比较文档)。我也阻止命名实体,例如"Al Bundy""Al Bundys"可以被识别为同一个东西。但是我发现将你的NE的词干版本添加到同义词中会有风险。请考虑以下示例:

"ferry names": [
    {
      "stena line": [
        "stena line",
        "stena",
        "sten"     # Supposed to represent a stemmed version of Stena
      ]
    },

如果你要进入"sten""stenar""stenarna",或任何其他可能会被"sten"提出的词 - 你就会遇到问题。它将被识别为"Stena Line"。希望有所帮助。 :)