Gitter是開發人員的聊天室。
nlpnet ---神經網絡的自然語言處理nlpnet是基於神經網絡的自然語言處理任務的Python庫。當前,它執行言論的一部分標籤,語義角色標籤和依賴性解析。大多數架構都是獨立的,但有些功能是專門針對與葡萄牙人合作的。該系統的靈感來自塞納。
重要:要為葡萄牙NLP使用訓練有素的模型,您需要從http://nilc.icmc.usp.br/nlpnet/models.html下載數據。
nlpnet需要NLTK和Numpy。此外,它需要從NLTK下載一些數據。安裝後,請致電
>>> nltk.download()
轉到“型號”選項卡,然後選擇Punkt Tokenizer。它用於將文本分為句子。
Cython用於生成C擴展並更快地運行。您可能不需要它,因為生成的.c文件已經提供了NLPNET,但是您需要一個C編譯器。在Linux和Mac系統上,這不是問題,但可能是在Windows上,因為Setuptools默認需要Microsoft C編譯器。如果您還沒有它,通常更容易安裝MingW,然後按照此處的說明進行操作。
nlpnet既可以用作Python庫,也可以通過其獨立腳本使用。兩種用法都在下面說明。
您可以將nlpnet用作Python代碼中的庫,如下所示:
> >> import nlpnet
> >> tagger = nlpnet . POSTagger ( '/path/to/pos-model/' , language = 'pt' )
> >> tagger . tag ( 'O rato roeu a roupa do rei de Roma.' )
[[( u'O' , u'ART' ), ( u'rato' , u'N' ), ( u'roeu' , u'V' ), ( u'a' , u'ART' ), ( u'roupa' , u'N' ), ( u'do' , u'PREP+ART' ), ( u'rei' , u'N' ), ( u'de' , u'PREP' ), ( u'Roma' , u'NPROP' ), ( u'.' , 'PU' )]]在上面的示例中, POSTagger構造函數將其作為第一個參數作為其訓練模型所在的目錄。第二個論點是兩個字母語言代碼(目前,支持ONLE pt和en )。這只會在令牌化中產生影響。
調用註釋工具非常簡單。提供的是POSTagger , SRLTagger和DependencyParser ,所有這些都有一個方法tag ,該方法帶有標記的文本字符串(在DependencyParser中,對方法parse有一個別名,聽起來更足夠)。標記器將文本分配到句子中,然後將每個文本歸為每個句子(因此,後蓋的返回是列表的列表)。
Srltagger的輸出稍微複雜一點:
>>> tagger = nlpnet.SRLTagger() >>> tagger.tag( u ' O rato roeu a roupa do rei de Roma. ' ) [<nlpnet.taggers.SRLAnnotatedSentence at 0x84020f0>]
句子由SRLAnnotatedSentence的實例表示,而不是元素列表。該類基本上是數據持有人,並且具有兩個屬性:
>>> sent = tagger.tag( u ' O rato roeu a roupa do rei de Roma. ' )[ 0 ] >>> sent.tokens [u'O', u'rato', u'roeu', u'a', u'roupa', u'do', u'rei', u'de', u'Roma', u'.'] >>> sent.arg_structures [(u'roeu', {u'A0': [u'O', u'rato'], u'A1': [u'a', u'roupa', u'do', u'rei', u'de', u'Roma'], u'V': [u'roeu']})]
arg_structures是包含句子中所有謂詞argument結構的列表。此示例中唯一的一個是動詞roeu。它由帶有謂詞和詞典映射語義角色標籤的元組代表,以構成該論點的令牌。
請注意,該動詞是元組的第一個成員,也是標籤“ V”(代表動詞)的內容。這是因為某些謂詞是多字。在這些情況下,“主要”謂詞單詞(通常是動詞本身)出現在arg_structures[0]中,所有單詞都出現在鍵'v'下。
這是依賴類動物的示例:
>>> parser = nlpnet.DependencyParser( ' dependency ' , language = ' en ' ) >>> parsed_text = parser.parse( ' The book is on the table. ' ) >>> parsed_text [<nlpnet.taggers.ParsedSentence at 0x10e067f0>] >>> sent = parsed_text[ 0 ] >>> print (sent.to_conll()) 1 The _ DT DT _ 2 NMOD 2 book _ NN NN _ 3 SBJ 3 is _ VBZ VBZ _ 0 ROOT 4 on _ IN IN _ 3 LOC-PRD 5 the _ DT DT _ 6 NMOD 6 table _ NN NN _ 4 PMOD 7 . _ . . _ 3 P
解析對象的to_conll()方法將它們打印在串聯符號中。令牌,標籤和頭部指數可通過成員變量訪問:
>>> sent.tokens [u'The', u'book', u'is', u'on', u'the', u'table', u'.'] >>> sent.heads array([ 1, 2, -1, 2, 5, 3, 2]) >>> sent.labels [u'NMOD', u'SBJ', u'ROOT', u'LOC-PRD', u'NMOD', u'PMOD', u'P']
heads成員變量是一個numpy數組。陣列中的第i-th位置包含第i-th令牌的頭部的索引,除了root令牌,其頭為-1。請注意,這些索引是基於0的,而to_conll()函數中顯示的索引是基於1的。
nlpnet還提供用於標記文本,培訓新模型和測試的腳本。它們被複製到您的Python安裝的腳本子目錄中,可以包含在系統路徑變量中。您可以從命令行調用它們並提供一些文本輸入。
$ nlpnet-tag.py pos --data /path/to/nlpnet-data/ --lang pt
O rato roeu a roupa do rei de Roma.
O_ART rato_N roeu_V a_ART roupa_N do_PREP+ART rei_N de_PREP Roma_NPROP ._PU如果沒有給出--data ,則腳本將在當前目錄中搜索訓練有素的模型。 --lang默認為en 。如果您已經具有令牌化的文本,則可以使用-t選項;它假設令牌被白色空間分開。
具有語義角色標籤:
$ nlpnet-tag.py srl /path/to/nlpnet-data/
O rato roeu a roupa do rei de Roma.
O rato roeu a roupa do rei de Roma .
roeu
A1: a roupa do rei de Roma
A0: O rato
V: roeu第一行由用戶鍵入,第二行是令牌化的結果。
和依賴解析:
$ nlpnet-tag.py dependency --data dependency --lang en
The book is on the table.
1 The _ DT DT _ 2 NMOD
2 book _ NN NN _ 3 SBJ
3 is _ VBZ VBZ _ 0 ROOT
4 on _ IN IN _ 3 LOC-PRD
5 the _ DT DT _ 6 NMOD
6 table _ NN NN _ 4 PMOD
7 . _ . . _ 3 P要了解有關培訓和測試新模型以及其他功能的更多信息,請參閱http://nilc.icmc.usp.br/nlpnet的文檔
以下參考文獻描述了NLPNET的設計以及進行的實驗。自發布以來,已對該代碼進行了一些改進。