Разделенное на части NLTK дерево синтаксического анализа, сохраните его в файл и загрузите с помощью класса CorpusReader.

Допустим, у меня есть фрагментированный корпус, как показано ниже, и он сохранен в файле с именем test.txt.

[Rapunzel/NNP] let/VBD down/RP [her/PP$ long/JJ golden/JJ hair/NN]

затем я могу загрузить его с помощью ChunkedCorpusReader.

>>> from nltk.corpus.reader import ChunkedCorpusReader
>>> reader = ChunkedCorpusReader('.','test.txt')
>>> reader.chunked_sents()[0]
Tree('S', [Tree('NP', [('Rapunzel', 'NNP')]), ('let', 'VBD'), ('down', 'RP'), Tree('NP', [('her', 'PP$'), ('long', 'JJ'), ('golden', 'JJ'), ('hair', 'NN')])])
>>> print(reader.chunked_sents()[0])
(S
  (NP Rapunzel/NNP)
  let/VBD
  down/RP
  (NP her/PP$ long/JJ golden/JJ hair/NN))

и я сделал некоторые изменения в объекте «Дерево», скажем, переключил тег чанка с NP на NPP и назвал new.

>>> print(new)
(S
  (NPP Rapunzel/NNP)
  let/VBD
  down/RP
  (NPP her/PP$ long/JJ golden/JJ hair/NN))

Теперь я хочу сохранить это дерево new в файл и загрузить его с помощью ChunkedCorpusReader или любых других программ чтения, как я сделал с test.txt. Однако мне не удалось найти способ сохранить объект NLTK Tree в файл, а тем более прочитать его из файла. Кто-нибудь может помочь?


person user2870222    schedule 29.03.2015    source источник


Ответы (1)


Преобразование по умолчанию в строку, которое дал вам print, неплохое: оно объединяет слова с тегами POS и правильно отступает новые строки. Поскольку file.write() не преобразуется автоматически в строку, вы должны передать str(newtree) методу write файла.

Для большего контроля над внешним видом строкового представления дерева используйте метод дерева pformat(). Обратите внимание, что Tree.pformat() назывался Tree.pprint() в более ранних версиях nltk; в последней версии Tree.pformat() возвращает строку, а Tree.pprint() записывает в стандартный вывод.

Если вы хотите, чтобы ваше дерево было ограничено квадратными скобками, добавьте параметр parens="[]" к pformat().

>>> print(new.pformat(parens="[]"))
[S
  [NP Rapunzel/NNP]
  let/VBD
  down/RP
  [NP her/PP$ long/JJ golden/JJ hair/NN]]
person alexis    schedule 30.03.2015