我正在使用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
./$.)
答案 0 :(得分:0)
好的,我现在已经弄清楚了。万一有人也对这个问题感到困惑,这是我的解决方案: 在我的案例中,ibanChunk是一个元组列表,但是Chunk原来是一棵树,而不是一个元组,所以我以其为优势,这是我的代码:
for elem in ibanChunk:
if isinstance(elem, nltk.Tree):
ibanString = ""
for (text, tag) in elem:
ibanString += text
chunkList.append(ibanString)
并且列表中所有块的文本都为字符串。