Zunächst schauen wir uns die POS-Tags einen Blick darauf werfen, die NLTK gibt:
>>> from nltk import pos_tag
>>> sent = 'The pizza was awesome and brilliant'.split()
>>> pos_tag(sent)
[('The', 'DT'), ('pizza', 'NN'), ('was', 'VBD'), ('awesome', 'JJ'), ('and', 'CC'), ('brilliant', 'JJ')]
>>> sent = 'The pizza was good but pasta was bad'.split()
>>> pos_tag(sent)
[('The', 'DT'), ('pizza', 'NN'), ('was', 'VBD'), ('good', 'JJ'), ('but', 'CC'), ('pasta', 'NN'), ('was', 'VBD'), ('bad', 'JJ')]
(Hinweis: Die oben genannten sind die Ausgaben von NLTK v3.1 pos_tag
, könnten ältere Version abweichen)
Was Sie aufnehmen möchten, ist im wesentlichen:
- NN VBD JJ CC JJ
- NN VBD JJ
lasst sie uns So fangen mit diesen Mustern:
>>> from nltk import RegexpParser
>>> sent1 = ['The', 'pizza', 'was', 'awesome', 'and', 'brilliant']
>>> sent2 = ['The', 'pizza', 'was', 'good', 'but', 'pasta', 'was', 'bad']
>>> patterns = """
... P: {<NN><VBD><JJ><CC><JJ>}
... {<NN><VBD><JJ>}
... """
>>> PChunker = RegexpParser(patterns)
>>> PChunker.parse(pos_tag(sent1))
Tree('S', [('The', 'DT'), Tree('P', [('pizza', 'NN'), ('was', 'VBD'), ('awesome', 'JJ'), ('and', 'CC'), ('brilliant', 'JJ')])])
>>> PChunker.parse(pos_tag(sent2))
Tree('S', [('The', 'DT'), Tree('P', [('pizza', 'NN'), ('was', 'VBD'), ('good', 'JJ')]), ('but', 'CC'), Tree('P', [('pasta', 'NN'), ('was', 'VBD'), ('bad', 'JJ')])])
Also das ist "Betrug" von hartzucodieren !!!
Lasst uns an die POS-Muster zurück:
So können Sie die optionalen Operatoren in der Regex, z.:
>>> patterns = """
... P: {<NN><VBD><JJ>(<CC><JJ>)?}
... """
>>> PChunker = RegexpParser(patterns)
>>> PChunker.parse(pos_tag(sent1))
Tree('S', [('The', 'DT'), Tree('P', [('pizza', 'NN'), ('was', 'VBD'), ('awesome', 'JJ'), ('and', 'CC'), ('brilliant', 'JJ')])])
>>> PChunker.parse(pos_tag(sent2))
Tree('S', [('The', 'DT'), Tree('P', [('pizza', 'NN'), ('was', 'VBD'), ('good', 'JJ')]), ('but', 'CC'), Tree('P', [('pasta', 'NN'), ('was', 'VBD'), ('bad', 'JJ')])])
Wahrscheinlich sind Sie die alten Tagger verwenden, das ist, warum Ihre Muster unterschiedlich sind, aber ich denke, Sie sehen, wie Sie die Phrasen, die Sie das obige Beispiel verwenden, müssen erfassen könnten.
Die Schritte sind:
- Überprüfen Sie zuerst, was die die
pos_tag
- Dann Muster verallgemeinern und vereinfachen, um sie in ihnen
- Dann die
RegexpParser
Sprachlich mit POS-Muster, übergeben Ich glaube nicht, dass Sie alle "Pizza war gut" eine Nominalphrase, noch ist es eine Verbalphrase seit Sie den Bestimmer fallen gelassen haben. Es ist mehr wie eine Phrasenstruktur, die Sie extrahieren möchten. – alvas
Grundsätzlich wollte ich Sätze haben, die Gerichte in Bewertungen beschreiben. Keine Nominalphrase. Bearbeitete meine Frage! – pd176
Keine Sorge, ich verstehe, was Sie tun. Es ist für die Stimmungsanalyse richtig? Ich schreibe eine Antwort =) Wollen Sie den Determinator wirklich behalten? – alvas