2016-07-06 23 views
0

Hallo lass uns vorstellen, ich habe eine Grammatik wie diese S-> NNP VBZ NNP. Die Anzahl der NNPs ist jedoch riesig und liegt in einer Datei. Wie kann ich das direkt in die Grammatik laden oder wie kann ich sicherstellen, dass die Grammatik die Wörter aus dem Korpus holt, anstatt alle Wörter anzugeben?NLP nltk mit der benutzerdefinierten Grammatik

+0

Mit „die Grammatik, die Worte aus dem Korpus holt,“ meinst du, den Sie erzeugen möchten Text basierend auf dem wahrscheinlichsten nächsten Wort? z.B. Beginnen Sie mit einem zufälligen NNP, wählen Sie die wahrscheinlichste VBZ und NNP, um es zu folgen? – Clay

+0

Hey Clay, nein, ich meine das nicht. Was ich meine ist, habe ich eine Textdatei mit sagen 1000 NNP Ich möchte die Grammatik, um die Wörter aus der Datei statt mich explizit erwähnen wie NNP -> "word1" | "Wort2" | ........ – vku

+0

Wofür möchten Sie Ihre Grammatik verwenden? Ist es zum Parsen oder zur Texterzeugung? – alexis

Antwort

1

jede POS Unter der Annahme hat seine eigene Textdatei auf einer separaten Zeile mit diesem Tag von allen möglichen Wort aus, Sie wollen einfach nur ein Wörterbuch, indem sie in den Zeilen lesen: ist

lexicon = {} 
with open('path/to/the/files/NNP.txt', 'r') as NNP_File: 
    # 'with' automatically closes the file once you're done 
    # now update the 'NNP' key in your lexicon with every word in the file. 
    # a set seems like a good idea but it depends on your purposes 
    lexicon['NNP'] = set(NNP_File.readlines()) 

Dieses Setup gut für Prüfen, ob ein Wort zu einem bestimmten Teil der Sprache gehört; Sie könnte es auch um Flip und die Worte der Schlüssel machen, wenn das besser ist, für das, was Sie bauen:

for word in NNP_File.readlines(): 
    if lexicon.has_key(word): 
     lexicon[word].update(['NNP']) 
    else: 
     lexicon[word] = set(['NNP']) 

Wenn Ihre Textdateien, eine andere Art und Weise formatiert sind, müssen nehmen Sie einen anderen Ansatz. EDIT Um eine Grammatik Zeile im Format zu erzeugen Sie erwähnt haben, könnten Sie diesen ersten Ansatz oben mit etwas folgen wie,

with open('path/NNP.txt', 'r') as f: 
    NNP_terminal_rule = 'NNP -> ' + '|'.join(f) 
    # str.join() takes an iterable, so the file object works here.