从块中提取字符串

时间:2019-06-03 10:29:10

标签: python nltk chunking pos

我正在使用NLTK POS标记从文本中提取信息,在此示例中,我正在寻找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 :(得分:0)

好的,我现在已经弄清楚了。万一有人也对这个问题感到困惑,这是我的解决方案: 在我的案例中,ibanChunk是一个元组列表,但是Chunk原来是一棵树,而不是一个元组,所以我以其为优势,这是我的代码:

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

并且列表中所有块的文本都为字符串。