如何使用 C# 从文本中提取人名和地名?

B. *_*non 2 c# parsing text

有没有可以从文本中提取人名和地名的 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--
Run Code Online (Sandbox Code Playgroud)

(摘自马克吐温的《国外的无辜者》)

...有什么方法可以提取:

St. Mark
Alexandria (or better yet, "Alexandria, Egypt")
Venice
Run Code Online (Sandbox Code Playgroud)

我意识到没有办法获得 100% 的准确度(其中捕获所有地名和人名,并且不添加“误报”),但 80% 的准确度可能非常有价值。

我知道每个单词都可以与百科全书之类的进行比较,但一定有更好的方法。另外,算法怎么知道如何组合“St.”?和“马克”并将“埃及亚历山大”视为“埃及亚历山大”?

far*_*121 5

我注意到这里提供的链接有点过时了。斯坦福自然语言处理 (NLP) 库 ( https://nlp.stanford.edu/software/ ) 是一个仍然活跃的项目(并且免费[更正:GPL,因此对非商业免费])。您可以在此处演示他们的命名实体识别 (NER) 。它甚至有一个 .NET 包装器(https://sergey-tihon.github.io/Stanford.NLP.NET/)。

Microsoft 还通过 Azure 认知服务提供许多类似的算法。您对实体链接最感兴趣(https://azure.microsoft.com/en-us/services/cognitive-services/entity-linking-intelligence-service/

我希望对未来的观众有所帮助。