#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import nltk
import re
from nltk.tree import *
from nltk.chunk.util import tagstr2tree
from nltk import word_tokenize, pos_tag
text = "Yarın, Mehmet ile birlikte Ankara'da ki Nüfus Müdürlüğü'ne, Aziz
Yıldırım ile birlikte, Şükrü Saraçoğlu Stadı'na gideceğiz.".decode("utf-8")
tagged_text = pos_tag(word_tokenize(text))
tagged_text2 = word_tokenize(text)
grammar = "NP:{<NNP>+}"
cp = nltk.RegexpParser(grammar)
result = cp.parse(tagged_text)
for tree in result:
print(tree)
wrapped = "(ROOT "+ str(result) + ")" # Add a "root" node at the top
trees = nltk.Tree.fromstring(wrapped, read_leaf=lambda x: x.split("/")[0])
for tree in trees:
print(tree.leaves())
for tree2 in result:
print(nltk.Tree.fromstring(str(tree2), read_leaf=lambda x: x.split("/")[0]))
Der Ausgang:NLTK - Entfernen Sie Tags aus Parsed Chunks
(NP Yar\u0131n/NNP)
(u',', ',')
(NP Mehmet/NNP)
(u'ile', 'NN')
(u'birlikte', 'NN')
(NP Ankara'da/NNP ki/NNP Nufus/NNP Mudurlugu'ne/NNP)
(u',', ',')
(NP Aziz/NNP Y\u0131ld\u0131r\u0131m/NNP)
(u'ile', 'NN')
(u'birlikte', 'NN')
(u',', ',')
(NP Sukru/NNP Saracoglu/NNP Stad\u0131'na/NNP)
(u'gidece\u011fiz', 'NN')
(u'.', '.')
['Yar\\u0131n', ',', 'Mehmet', 'ile', 'birlikte', "Ankara'da", 'ki', 'Nufus', "Mudurlugu'ne", ',', 'Aziz', 'Y\\u0131ld\\u0131r\\u0131m', 'ile', 'birlikte', ',', 'Sukru', 'Saracoglu', "Stad\\u0131'na", 'gidecegiz', '.']
(NP Yar\u0131n)
(u',', ',')
(NP Mehmet)
(u'ile', 'NN')
(u'birlikte', 'NN')
(NP Ankara'da ki Nufus Mudurlugu'ne)
(u',', ',')
(NP Aziz Y\u0131ld\u0131r\u0131m)
(u'ile', 'NN')
(u'birlikte', 'NN')
(u',', ',')
(NP Sukru Saracoglu Stad\u0131'na)
(u'gidece\u011fiz', 'NN')
(u'.', '.')
I verwiesen aus: How can I remove POS tags before slashes in nltk?
ich Eigennamen gruppieren wollen und die Tags entfernen, aber wenn ich verwendet, um die Lösung es Effekte der ganze Text und danach ist meine Brockenanalyse weg. Ich habe wirklich versucht, die Baumstruktur zu verstehen, aber wie kann ich die Entfernungsfunktion für die Aussage anwenden. Ich möchte, dass meine Ausgabe wie:
Meine gewünschte Ausgabe:
[Yar\u0131n]
[,]
[Mehmet]
[ile]
[birlikte]
[Ankara'da ki Nufus Mudurlugu'ne]
...
...
Auch kann ich nicht mit utf-8 umgehen, wie Sie meine Ausgabe sehen von Nicht-ASCII-Zeichen voll ist. Wie kann ich damit umgehen?
EDIT:
for i in range(len(tree)):
arr.append(nltk.Tree.fromstring(str(tree[i]), read_leaf=lambda x: x.split("/")[0]).leaves())
print(arr[i])
ich gefunden, was shoul i in den Code schreiben, aber jetzt habe ich folgende Fehlermeldung. Ich denke, ich kann keine Interpunktionen auf meinem Array anhängen.
['Yar\\u0131n']
Traceback (most recent call last):
File "./chunk2.py", line 61, in <module>
arr.append(nltk.Tree.fromstring(str(tree[i]), read_leaf=lambda x: x.split("/")[0]).leaves())
File "/usr/local/lib/python2.7/dist-packages/nltk/tree.py", line 630, in fromstring
cls._parse_error(s, match, open_b)
File "/usr/local/lib/python2.7/dist-packages/nltk/tree.py", line 675, in _parse_error
raise ValueError(msg)
ValueError: Tree.read(): expected u'(' but got ','
at index 0.
","
^
Versuch 'text = u" Yarın, Mehmet ile birlikte Ankara'da ki nüfus Müdürlüğü'ne, Aziz Yıldırım ile birlikte, Şükrü Saraçoğlu Stadı'na gideceğiz. " – alvas
Ich habe Angst, dass es nicht funktioniert hat. BTW können Sie mir bitte mit meiner redigierten Frage helfen? –
Was ist Ihre gewünschte Ausgabe? Sie geben eine Zeichenfolge aus und lesen die Zeichenfolge in Tree zurück. Ich denke, wenn wir wissen, was die Ausgabe ist, können Sie das Tree-Objekt direkt manipulieren, um es zu bekommen. – alvas