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
Treebank_chunk veya conll2000 corpora üzerinde bir Chunker'ı eğitmek mümkündür. Bunun dışında bir dilbilgisi elde edemezsiniz, ancak öbek parçalarını ayrıştırabilecek bir yetenekli nesne alırsınız. Bakınız How to Train a NLTK Chunker, Chunk Extraction with NLTK ve NLTK Classified Based Chunker Accuracy. hassas NLTK ile gelir Penn Treebank numunesini yakalayan bir dilbilgisi istiyorsanız
(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])
: 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ı. –
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