2011-08-14 9 views
14

NLTK ve Python’a oldukça yeniyim. Örneklerde verilen oyuncak dilbilgisini kullanarak cümle ayrıştırmalarını yaratıyorum ama Penn Treebank'ın bir kısmından öğrenilen bir dilbilgisi kullanmanın mümkün olup olmadığını öğrenmek istiyorum, sadece kendi yazımı veya oyuncağı kullanmak yerine dilbilgisi? (Python 2.7'yi Mac'de kullanıyorum) Çok teşekkürlerPython & NLTK kullanarak Penn Treebank'tan bir dizi dilbilgisi kuralını nasıl edinebilirim?

cevap

14

(aşağıdaki açıklama bakınız) NLTK için Treebank verilerini indirdikten varsayarak bunu yapabilirsiniz:

import nltk 
from nltk.corpus import treebank 
from nltk.grammar import ContextFreeGrammar, Nonterminal 

tbank_productions = set(production for sent in treebank.parsed_sents() 
         for production in sent.productions()) 
tbank_grammar = ContextFreeGrammar(Nonterminal('S'), list(tbank_productions)) 

Bu Ancak, muhtemelen, size yararlı bir şey vermeyecektir. NLTK sadece belirtilen tüm uçbirimlerle dilbilgisi ile ayrışmayı desteklediğinden, yalnızca Treebank örneğindeki sözcükleri içeren cümleleri ayrıştırabilirsiniz. Ayrıca, Treebank'taki pek çok ifadenin düz yapısı nedeniyle, bu dilbilgisi eğitimde yer almayan cümlelere çok kötü bir şekilde genelleştirecektir. Bu nedenle, treebank'ı ayrıştırmaya çalışan NLP uygulamaları, Treebank'tan CFG kurallarını öğrenme yaklaşımı kullanmamıştır. En yakın teknik, Ren Bods Veri Odaklı Ayrıştırma yaklaşımı olacaktı, ancak çok daha karmaşık.

Son olarak, bu inanılmaz derecede yavaş olacak, işe yaramaz. Ben senin ikinci kod çalıştırmasına engel oluyor

mini_grammar = ContextFreeGrammar(Nonterminal('S'), 
            treebank.parsed_sents()[0].productions()) 
parser = nltk.parse.EarleyChartParser(mini_grammar) 
print parser.parse(treebank.sents()[0]) 
+0

: Tek bir cümleden dilbilgisi eylem bu yaklaşımı görmek istiyorsanız sadece bunun işe yaradığını kanıtlamak için Yani, şu (yukarıdaki ithalatta sonra) kodu deneyin pasajı. Bana şu hatayı veriyor: Kaynak 'corpora/treebank/kombine' bulunamadı. –

+2

Bunun en olası nedeni, NLTK'yi yüklediğinizde Treebank verilerini yüklememenizdir. [NLTK Veri talimatları] 'na bakın (http://www.nltk.org/data). Temel olarak, bir Python yorumlayıcısında "import nltk", "nltk.download()" yi çağırmanız gereken pencerede "Corpora" sekmesini tıklayın, "treebank" ı seçin ve son olarak "İndir" e tıklayın. işin bittiğinde kapat. – Constantine