我的问题可能不完全是编程,但我知道很多才华横溢的程序员正在做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
。
问题:我不确定如何解决这个问题,我是否应该不干掉域名词,或者将词干版本与同义词放在一起? 实际上,它仍然会被模糊匹配器拾取,但它可能会引入问题。谢谢。
答案 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"
。希望有所帮助。 :)