#!/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]))
出力:私はから参照NLTKは - 解析されたチャンクからタグを削除
(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'.', '.')
:私は固有名詞をグループ化し、タグを削除したいHow can I remove POS tags before slashes in nltk?
しかし、私は解決策を使用するときに効果テキスト全体とその後、私の塊の解析はなくなっています。私は実際にツリー構造を理解しようとしましたが、for文の中で削除関数をどのように適用できますか?
マイ所望の出力:あなたは私の出力は、非ASCII文字がいっぱいです見るよう
[Yar\u0131n]
[,]
[Mehmet]
[ile]
[birlikte]
[Ankara'da ki Nufus Mudurlugu'ne]
...
...
また、私はUTF-8を扱うことができない私のような私の出力が欲しいです。どうすればそれに対処できますか?
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])
私は、私は、コードで何を書くshoulが、今、私は次のエラーを持っていました。私は私の配列に句読点を付けることはできないと思う。
['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.
","
^
試し 'テキスト= U"Yarın、メフメットのILEのbirlikte Ankara'da KINüfusMüdürlüğü'ne、アジズ :ご希望の形式を取得するには、あなたはまた、NPのない単語をラップアラウンドのレベルを追加する必要があります" – alvas
私はそれがうまくいかないことを恐れています。 Btwあなたは私の編集された質問で私を助けてくれる? –
希望する出力は何ですか?文字列に出力し、文字列をTreeに読み戻しています。私は出力が何であるか知っていれば、それを得るためにTreeオブジェクトを直接操作できます。 – alvas