2015-04-26 60 views
0

是否有任何C#算法可以從文本中提取個人和地名?如何使用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%的準確率可能是非常有價值的。

我明白每個單詞可以與百科全書或一些這樣的比較,但必須有一個更好的辦法。另外,算法怎麼知道結合「聖」和「馬克」,並將「埃及亞歷山大」視爲「埃及亞歷山大」?

+7

*「但必須有更好的辦法」* - 你爲什麼對此有信心?你如何識別你的頭腦中的名字?因爲你*知道*這些單詞對應的名稱,甚至地點。你把這些詞與一個人或一個地點聯繫起來;這正是計算機程序也需要做的。只有通過告訴它們關於它們的方式才能使這些關聯成爲可能,例如,使用名稱或位置的索引。 *「算法怎麼知道結合'聖'和'馬克'」 - 是的,它怎麼知道?你必須告訴它這樣做。 – poke

+1

首先,這不是一個「C#」特定問題。其次,通過在google中輸入「從文本算法中提取個人和地名」一詞,您可以找到許多關於您想要做什麼的研究論文。 你可以做的最好的事情是,不用全部加入NLP就是過濾出明顯不匹配的單詞,並嘗試用其他類似的方法對它們進行分類:http://nlp.stanford.edu/software/CRF -NER.shtml –

+1

我們開始編碼,這可能會有所幫助... 249個國家/地區的97.114個位置:http://www.unece.org/cefact/codesfortrade/codes_index.html – stefankmitph

回答

2

你是最好關閉使用某種API的,將能夠執行這種實體匹配的,因爲你問的可能是非常複雜的,需要一定程度的語義文本分析的後盾的大型數據庫。我想在在看的API,如推薦:

OpenCalais - English Semantic Metadata: Entity/Fact/Event Definitions and Descriptions web-service

加來支持一組豐富的語義元數據,包括實體,事件和事實的。

Alchemy API - Entity Extraction API

AlchemyAPI能夠識別你的HTML,文本或基於Web的內容中的人,公司,組織,城市,地理特徵,以及其他類型的實體。我們採用先進的統計算法和自然語言處理技術來分析您的信息,提取嵌入其中的語義豐富性。

2

我注意到,這裏提供的鏈接是一個有點過時。斯坦福自然語言處理(NLP)圖書館(https://nlp.stanford.edu/software/)的一個仍然活躍的項目(免費[更正:GPL,因此非商業性免費])。您可以演示他們的命名實體識別(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/

我希望可以幫助未來的觀衆。

相關問題