是否有任何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%的准确性(所有地名和人名都被捕获,并且没有"误报和#34;被添加),但80%的准确性可能非常有价值。
我知道每个单词都可以与百科全书或其他单词进行比较,但必须有更好的方法。此外,该算法如何知道组合" St。"和#34;马克"并且看到埃及的亚历山大和#34;作为"亚历山大,埃及"?
答案 0 :(得分:3)
我注意到这里提供的链接有点过时了。一个仍然活跃的项目(免费[更正:GPL,非商业免费])是斯坦福自然语言处理(NLP)库(https://nlp.stanford.edu/software/)。您可以演示他们的命名实体识别(NER)here。它甚至有一个.NET包装器(http://sergey-tihon.github.io/Stanford.NLP.NET/StanfordNER.html)。
Microsoft还通过Azure Cognitive Services提供了许多类似的算法。您最感兴趣的是实体链接(https://azure.microsoft.com/en-us/services/cognitive-services/entity-linking-intelligence-service/)
我希望能帮助未来的观众。
答案 1 :(得分:2)
您最好使用能够执行此类实体匹配的某种API,因为您所要求的可能非常复杂,需要一定程度的语义文本分析,由大型数据库支持。我建议您查看以下API:
OpenCalais - English Semantic Metadata: Entity/Fact/Event Definitions and Descriptions web-service
Calais支持丰富的语义元数据集,包括实体,事件和事实。
Alchemy API - Entity Extraction API
AlchemyAPI能够识别HTML,文本或基于Web的内容中的人员,公司,组织,城市,地理特征和其他类型的实体。我们采用先进的统计算法和自然语言处理技术来分析您的信息,提取其中嵌入的语义丰富性。