【发布时间】:2015-04-26 17:26:32
【问题描述】:
是否有任何 C# 算法可以从文本中提取人名和地名?
例如,给定以下文本:
St. Mark died at Alexandria, in Egypt. He was martyred, I think.
However, that has nothing to do with my legend. About the founding of
the city of Venice--
(摘自马克吐温的“海外无辜者”)
...有什么方法可以提取:
St. Mark
Alexandria (or better yet, "Alexandria, Egypt")
Venice
?
我意识到没有办法获得 100% 的准确度(所有地名和个人姓名都被捕获,并且没有添加“误报”),但 80% 的准确度可能非常有价值。
我知道每个单词都可以与百科全书或类似的东西进行比较,但必须有更好的方法。此外,算法怎么会知道结合“圣”。和“马克”,然后将“埃及的亚历山大”视为“埃及的亚历山大”?
【问题讨论】:
-
“但一定有更好的方法”——你为什么这么有信心?你如何识别你脑海中的名字?因为您知道这些词对应于名称,甚至是位置。您将这些词与一个人或一个位置相关联;这正是计算机程序也需要做的。它建立这些关联的唯一方法是告诉它它们,例如使用名称或位置的索引。 “算法怎么会知道‘St.’和‘Mark’的结合”——是的,它怎么知道?你必须告诉它这样做。
-
首先,这不是“c#”特定的问题。其次,通过在谷歌中输入短语“从文本算法中提取个人和地名”,您可以找到许多关于您想要做什么的研究论文。在不进行全面 NLP 的情况下,您可以做的最好的事情是过滤掉明显不匹配的单词,然后尝试用类似这样的方式对其余单词进行分类:nlp.stanford.edu/software/CRF-NER.shtml
-
我们开始编码,这可能会有所帮助... 249 个国家/地区的 97.114 个地点:unece.org/cefact/codesfortrade/codes_index.html
-
这称为“命名实体识别”。这可能有用:sergey-tihon.github.io/Stanford.NLP.NET/StanfordNER.html