从块中提取字符串
Extracting the Strings from a Chunk
我正在使用 NLTK POS-Tagging 从文本中提取信息,在这个例子中我正在寻找 IBAN。对于某些文本,代码 returns 不止一个块,但我不介意,稍后我会用 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
./$.)
好的,我已经自己弄明白了。如果有人也遇到过这个问题,这是我的解决方案:
ibanChunk,在我的例子中,它是一个元组列表,但 Chunk 原来是一棵树,而不是元组,所以我利用它作为我的优势,这是我的代码:
for elem in ibanChunk:
if isinstance(elem, nltk.Tree):
ibanString = ""
for (text, tag) in elem:
ibanString += text
chunkList.append(ibanString)
然后您将列表中所有块的文本作为字符串。
我正在使用 NLTK POS-Tagging 从文本中提取信息,在这个例子中我正在寻找 IBAN。对于某些文本,代码 returns 不止一个块,但我不介意,稍后我会用 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
./$.)
好的,我已经自己弄明白了。如果有人也遇到过这个问题,这是我的解决方案: ibanChunk,在我的例子中,它是一个元组列表,但 Chunk 原来是一棵树,而不是元组,所以我利用它作为我的优势,这是我的代码:
for elem in ibanChunk:
if isinstance(elem, nltk.Tree):
ibanString = ""
for (text, tag) in elem:
ibanString += text
chunkList.append(ibanString)
然后您将列表中所有块的文本作为字符串。