Как извлечь специальные символы, используя NLTK RegexpParser Chunk для POS_tagged слов в Python
У меня есть текст, например, сказать: 80% of $300,000 Each Human Resource/IT Department.
Мне нужно было бы извлечь $300,000
вместе со словами Each Human Resource/IT Department
Я использовал pos-теги, чтобы пометить слова после токенизации. Я смог извлечь 300 000, но не смог извлечь знак $ вместе с ним.
Что у меня так далеко:
text = '80% of $300,000 Each Human Resource/IT Department'
train_text = text
sample_text = text
custom_sent_tokenizer = PunktSentenseTokenizer(train_text)
tokenized = custom_sent_tokenizer.tokenize(sample_text)
for i in tokenized:
words = nltk.word_tokenize(i)
tagged = nltk.pos_tag(words)
chunkGram = r"""chunk: {<DT>+<NN.*>+<NN.*>?|<NNP>?|<CD>+<NN>?|<NNP>?}"""
chunkParser = nltk.RegexpParser(chunkGram)
chunked = chunkParser.parse(tagged)
фрагментарный вывод при включении в список - ['80 %', '300,000', 'Each Human Resource/IT Department']
Что я хотел: ['80 %', '**$**300,000', 'Each Human Resource/IT Department']
Я старался
chunkGram = r"""chunk: {**</$CD>|**<DT>+<NN.*>+<NN.*>?|<NNP>?|<CD>+<NN>?|
}? """
Это все еще не работает. Итак, все, что мне нужно, это $ вместе с CD
1 ответ
Решение
Вам нужно добавить <\ $>? в вашей грамматике.
chunkGram = r"""chunk: {<DT>+<NN.*>+<NN.*>?|<\$>?<CD>+<NN>?|<NNP>?}"""
Код:
import nltk
from nltk.tokenize import PunktSentenceTokenizer
text = '80% of $300,000 Each Human Resource/IT Department'
train_text = text
sample_text = text
custom_sent_tokenizer = PunktSentenceTokenizer(train_text)
tokenized = custom_sent_tokenizer.tokenize(sample_text)
for i in tokenized:
words = nltk.word_tokenize(i)
tagged = nltk.pos_tag(words)
chunkGram = r"""chunk: {<DT>+<NN.*>+<NN.*>?|<\$>?<CD>+<NN>?|<NNP>?}"""
chunkParser = nltk.RegexpParser(chunkGram)
chunked = chunkParser.parse(tagged)
print(chunked)
Выход:
(S
(chunk 80/CD %/NN)
of/IN
(chunk $/$ 300,000/CD)
(chunk Each/DT Human/NNP Resource/IT/NNP Department/NNP))