Lorsque vous
>>> result = NPChunker.parse(pos_tag(sentence))
>>> result
Tree('S', [Tree('NP', [('criminal', 'JJ'), ('lawyer', 'NN')]), Tree('NP', [('new', 'JJ'), ('york', 'NN')])])
vous voyez une représentation de chaîne de la structure de données en mémoire. Lorsque vous tapez result
à l'invite de l'interpréteur, ce que vous obtenez est le même que ce que vous obtenez si vous tapez repr(result)
à l'invite de l'interpréteur. Il semble que vous ayez enregistré cette représentation de chaîne dans un fichier. C'est regrettable car cette représentation n'est pas acceptable pour Tree.fromstring()
. Pour enregistrer une version acceptable dans un fichier, vous devez écrire le str()
(pas le repr()
) de l'arborescence. Vous pouvez voir la différence ici:
>>> result
Tree('S', [Tree('NP', [('criminal', 'JJ'), ('lawyer', 'NN')]), Tree('NP', [('new', 'JJ'), ('york', 'NN')])])
>>> str(result)
'(S (NP criminal/JJ lawyer/NN) (NP new/JJ york/NN))'
Tree.fromstring()
attend la deuxième de ces formats.
Pour vérifier que cela va faire ce que vous voulez:
>>> result2 = nltk.Tree.fromstring(str(result))
>>> result2
Tree('S', [Tree('NP', ['criminal/JJ', 'lawyer/NN']), Tree('NP', ['new/JJ', 'york/NN'])])
Mais c'est pour l'avenir. Vous devez réparer le fichier que vous avez. Effectuez les opérations suivantes:
>>> from nltk import Tree
>>> input_string = "Tree('S', [Tree('NP', [('criminal', 'JJ'), ('lawyer', 'NN')]), Tree('NP', [('new', 'JJ'), ('york', 'NN')])])"
Je fais une mission en ligne, mais bien sûr, vous allez lire input_string
à partir d'un fichier texte.
>>> parsed_tree = eval(input_string)
>>> type(parsed_tree)
<class 'nltk.tree.Tree'>
>>> str(parsed_tree)
'(S (NP criminal/JJ lawyer/NN) (NP new/JJ york/NN))'
Cette solution peut être utilisée comme réparation d'urgence ponctuelle pour votre fichier. Ne pas le faire comme une procédure régulière.
Merci @BoarGules – user2745862