Nano Hash - криптовалюты, майнинг, программирование

Как сгладить дерево синтаксического анализа и сохранить в строке для дальнейших строковых операций python nltk

Я пытаюсь получить плоское дерево из древовидной структуры, подобной приведенной ниже.

разбирать дерево

Я хочу получить все это дерево в строке, например, без ошибки обнаружения плохого дерева:

( (S (NP-SBJ (NP (DT The) (JJ high) (JJ seven-day) )(PP (IN of) (NP (DT the) (CD 400) (NNS money) )))(VP (VBD was) (NP-PRD (CD 8.12) (NN %) )(, ,) (ADVP (RB down) (PP (IN from) (NP (CD 8.14) (NN %) ))))(. .) ))

  • Почему вы хотите это сделать? Это только затрудняет обработку. Деревья просты и обеспечивают множество структур, которые вы заново изобретаете из текста. 15.03.2015

Ответы:


1

Python nltk предоставляет функцию для управления деревом и извлечения узлов.

from nltk.tree import Tree
for tr in trees:
    tr1 = str(tr)
    s1 = Tree.fromstring(tr1)
    s2 = s1.productions()
15.03.2015

2

Вы можете преобразовать дерево в строку, используя функцию str, а затем разделить и соединить следующим образом:

parse_string = ' '.join(str(tree).split()) 

print parse_string
29.03.2017

3

документация предоставляет pprint() метод, который сглаживает дерево в одну строку.

Разбор этого предложения:

string = "My name is Ross and I am cool. What's going on world? I'm looking for friends."

А затем вызов pprint() дает следующее:

u"(NP+SBAR+S\n  (S\n    (NP (PRP$ my) (NN name))\n    (VP\n      (VBZ is)\n      (NP (NNP Ross) (CC and) (PRP I) (JJ am) (NN cool.))\n      (SBAR\n        (WHNP (WP What))\n        (S+VP (VBZ 's) (VBG going) (NP (IN on) (NN world)))))\n    (. ?))\n  (S\n    (NP (PRP I))\n    (VP (VBP 'm) (VBG looking) (PP (IN for) (NP (NNS friends))))\n    (. .)))"

С этого момента, если вы хотите удалить вкладки и новые строки, вы можете использовать следующие split и join (см. здесь):

splitted = tree.pprint().split()
flat_tree = ' '.join(splitted)

Выполнение этого дает мне это:

u"(NP+SBAR+S (S (NP (PRP$ my) (NN name)) (VP (VBZ is) (NP (NNP Ross) (CC and) (PRP I) (JJ am) (NN cool.)) (SBAR (WHNP (WP What)) (S+VP (VBZ 's) (VBG going) (NP (IN on) (NN world))))) (. ?)) (S (NP (PRP I)) (VP (VBP 'm) (VBG looking) (PP (IN for) (NP (NNS friends)))) (. .)))"
25.02.2015

4

NLTK предоставляет возможность сделать это прямо сейчас:

flat_tree = tree._pformat_flat("", "()", False)

tree.pprint() и str(tree) оба вызывают этот метод внутри, но добавляют дополнительную логику для разделения его на несколько строк, если это необходимо.

05.11.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..