2010-11-27 37 views
2

dis que j'ai un texte étiqueté (mot, étiquette) au format tuple. Je veux le convertir en une chaîne afin d'apporter quelques modifications aux tags. ma fonction ci-dessous ne voit que la dernière phrase dans le texte, je suppose qu'il ya une erreur évidente et stupide que je ne peux pas réaliser, alors plz aider à faire fonctionner le texte entier.opérant sur des tuples/chaînes intégrés, python

>>> import nltk 
>>> tpl = [[('This', 'V'), ('is', 'V'), ('one', 'NUM'), ('sentence', 'NN'), ('.', '.')], [('And', 'CNJ'), ('This', 'V'), ('is', 'V'), ('another', 'DET'), ('one', 'NUM')]] 

def translate(tuple2string): 
    for sent in tpl: 
     t = ' '.join([nltk.tag.tuple2str(item) for item in sent]) 

>>> print t 
    'And/CNJ This/V is/V another/DET one/NUM' 

P.S. pour ceux qui sont intéressés, tuple2str fonction est décrite here

EDIT: maintenant je devrait reconvertir en un tuple, ayant le même format. Comment fait-on ça?

>>> [nltk.tag.str2tuple(item) for item in t.split()] 

celui ci-dessus convertit en en uplet entier, mais j'ai besoin d'un embedded (le même que dans l'entrée (tpl))

EDIT2: bien, sans doute il vaut la peine de publier le code entier :

def translate(tpl): 
    t0 = [' '.join([nltk.tag.tuple2str(item) for item in sent]) for sent in tpl] 
    for t in t0: 
     t = re.sub(r'/NUM', '/N', t) 
     t = [nltk.tag.str2tuple(item) for item in t.split()] 
    print t 

Répondre

3
>>> ' '.join(' '.join(nltk.tag.tuple2str(item) for item in sent) for sent in tpl) 
'This/V is/V one/NUM sentence/NN ./. And/CNJ This/V is/V another/DET one/NUM' 

EDIT:

Si vous voulez que cela soit réversible, ne faites pas la jointure externe.

>>> [' '.join([nltk.tag.tuple2str(item) for item in sent]) for sent in tpl] 
['This/V is/V one/NUM sentence/NN ./.', 'And/CNJ This/V is/V another/DET one/NUM'] 

EDIT 2:

Je pensais que nous sommes allés ce déjà ...

>>> [[nltk.tag.str2tuple(re.sub('/NUM', '/N', w)) for w in s.split()] for s in t0] 
[[('This', 'V'), ('is', 'V'), ('one', 'N'), ('sentence', 'NN'), ('.', '.')], 
    [('And', 'CNJ'), ('This', 'V'), ('is', 'V'), ('another', 'DET'), ('one', 'N')]] 

Fractionnement dehors dans la forme non-compréhension liste:

def translate(tpl): 
    result = [] 
    t0 = [' '.join([nltk.tag.tuple2str(item) for item in sent]) for sent in tpl] 
    for t in t0: 
     t = re.sub(r'/NUM', '/N', t) 
     t = [nltk.tag.str2tuple(item) for item in t.split()] 
     result.append(t) 
    return result 
+0

absolument et évidemment à droite! – Gusto

+0

plz voir le ** EDIT: ** ajouter – Gusto

+0

mais je ne peux pas le modifier car il est encore un tuple ... – Gusto