Извлечение строк из куска - PullRequest
0 голосов
/ 03 июня 2019

Я использую POS-теги NLTK для извлечения информации из текста, в этом примере я ищу IBAN. Для некоторых текстов код возвращает более одного куска, но я не возражаю против этого, позже я разберу правильный с помощью RegEx. Теперь вот мой вопрос: есть ли более симпатичный способ получить строки чанка, чтобы я мог работать с ними или сохранить их?

Конечно, вы могли бы пойти искусственным путем (то есть перебрать все строки в ibanChunk, затем ibanChunk.replace (..) и т. Д.), Но должен быть лучший путь, по крайней мере, это то, на что я надеюсь.

tagged_sents = list(corp.tagged_sents())
tagger = ClassifierBasedGermanTagger(train=tagged_sents)
tagged_sents = tagger.tag(filtered_sentence)

ibanChunkGram = r"""Chunk: {(<VMPP><CARD>*)|(<FM><CARD>+)}"""
chunkParser = nltk.RegexpParser(ibanChunkGram)
ibanChunk = chunkParser.parse(tagged_sents)

print(ibanChunkGram)

Прямо сейчас вывод строки выглядит так:

(Chunk DE01/FM 2345/CARD 6789/CARD 0000/CARD 0000/CARD 00/CARD)

и я хочу получить:

DE01 2345 6789 0000 0000 00

Редактировать: вот минимальный пример:

This is a minimal example of POS-tagging. I want to extract an IBAN (DE01 2345 6789 0000 0000 00) and I hope The Machine 01 can find it quick.

И это вывод моего кода:

(S
  This/NE
  is/FM
  a/FM
  minimal/FM
  example/FM
  of/FM
  POS-tagging/FM
  ./$.
  I/FM
  want/FM
  to/FM
  extract/FM
  IBAN/FM
  (/$(
  (Chunk DE01/FM 2345/CARD 6789/CARD 0000/CARD 0000/CARD 00/CARD)
  )/$(
  and/NE
  I/NE
  hope/VAFIN
  The/NE
  Machine/NE
  01/CARD
  can/XY
  find/XY
  it/XY
  quick/XY
  ./$.)

1 Ответ

0 голосов
/ 03 июня 2019

Хорошо, я уже понял это сам.В случае, если кто-то когда-либо сталкивается с этой проблемой, вот мое решение: ibanChunk, как он называется в моем случае, представляет собой список кортежей, но Chunk оказался деревом, а не кортежем, поэтому я использовал этоВ качестве моего преимущества, вот мой код:

for elem in ibanChunk:
    if isinstance(elem, nltk.Tree):
        ibanString = ""
        for (text, tag) in elem:
            ibanString += text
        chunkList.append(ibanString)

И там у вас есть текст всех кусков в списке в виде строк.

...