2017-02-23 60 views
10

我有一個丹麥WordNet的.txt文件。有什麼方法可以將這個與NLP庫一起用於Python,比如NLTK?如果不是的話,你會如何用一種不被特定圖書館支持的語言進行自然語言處理。另外還說你想用英語或荷蘭語以外的語言在像spaCy這樣的圖書館中進行命名實體識別。有沒有辦法做到這一點?是否可以將自己的WordNet添加到庫中?

+1

簡答:你不行。一個API只支持它支持的東西(這是spaCy最大的缺點之一)。漫長的回答是,如果你真的知道你在做什麼,我想你可能可以自己編輯源代碼。 – spicypumpkin

+0

@Posh_Pumpkin,這是不正確的。可以擴展API,因爲它是一個開源項目,請參閱https://github.com/nltk/nltk/pull/1621。即使對'spacy',我相信@honnibal和@ines鼓勵貢獻:https://github.com/explosion/spaCy/blob/master/CONTRIBUTING.md – alvas

+0

@alvas嗯,是的。這不算是編輯源代碼嗎?我很確定這不是OP想要的。 – spicypumpkin

回答

3

有沒有什麼方法可以將它與NLP庫一起用於Python,比如NLTK?

你可以用NLTK做到這一點,儘管它有點尷尬。

您需要將WordNet語料庫轉換爲Open Multilingual Wordnet格式,這是一種簡單的製表符分隔格式。請注意,他們已經有丹麥的WordNet。

然後你應該在NLTK中安裝WordNet和Open Multilingual Wordnet語料庫,如果你還沒有這樣做的話。這將創建一個像~/nltk_data/corpora/omw/這樣的目錄,併爲每個語言文件提供一個子目錄。你需要通過創建一個目錄並命名您的文件中像這樣來添加您的文集:

~/nltk_data/corpora/omw/xxx/wn-data-xxx.tab 

xxx可以是任何東西,但它必須是相同的在兩地。該文件名模式在NLTK here中被硬編碼。

之後,您可以通過將xxx指定爲lang參數來使用WordNet。下面是一個例子from the documentation

>>> wn.synset('dog.n.01').lemma_names('ita') # change 'ita' to 'xxx' 
['cane', 'Canis_familiaris'] 

你會怎樣去了解自然語言處理在未通過給定的庫支持的語言?

我經常用日語做這個。

有些技術會查看您的令牌 - 也就是說,他們會檢查一個字是否爲 ,字面意思是「說」或「是」等。這對於s​​temmers和 lemmatizers來說很常見,原因很明顯。有些系統使用基於假設 的規則,瞭解語言部分如何以給定語言(通常是英語)進行交互。您可能會將這些期望轉化爲您的語言,但通常您不能使用這些期望。

但是,許多有用的技巧根本無法查看令牌 - 它們只是在於兩個令牌是否相等。這些通常主要依賴於標籤或搭配數據等功能 。您可能需要預先標記您的 數據,並且您可能需要在維基百科上以 語言培訓通用語言模型,但就是這樣。 Word矢量,NER,文檔相似性是例子 缺乏語言支持通常不成問題的問題。

此外,還說你想用英語或荷蘭語以外的語言在像spaCy這樣的圖書館中進行命名實體識別。有沒有辦法做到這一點?

SpaCy爲NER提供了custom labelling的一種手段。使用它與 否則不支持的語言不記錄,並會有點棘手。 但是,由於您不需要NER的完整語言模型,因此可以使用具有標記示例的NER 特定工具。

這裏的基礎上,CoNLL格式 CRF++一些示例訓練數據:

He  PRP B-NP 
reckons VBZ B-VP 
the  DT B-NP 
current JJ I-NP 
account NN I-NP 
deficit NN I-NP 
will  MD B-VP 
narrow VB I-VP 
to  TO B-PP 
only  RB B-NP 
#   # I-NP 
1.8  CD I-NP 
billion CD I-NP 
in  IN B-PP 
September NNP B-NP 
.   . O 

He  PRP B-NP 
reckons VBZ B-VP 
.. 

這樣的格式是由幾個CRF或其它NER工具支持。 CRFSuite是一個Python wrapper

對於這類數據,該算法並不關心第一列中的內容,因此語言支持不是問題。

希望有幫助!

相關問題