gpt4 book ai didi

python - nltk 自定义分词器和标注器

转载 作者:太空宇宙 更新时间:2023-11-03 12:51:53 27 4
gpt4 key购买 nike

这是我的要求。我想以允许我实现以下目标的方式对段落进行标记化和标记。

  • 应在段落中标识日期和时间并将其标记为 DATE 和 TIME
  • 应该识别段落中的已知短语并将它们标记为 CUSTOM
  • 其余内容应该被标记化应该被默认的 nltk 的 word_tokenize 和 pos_tag 函数标记化吗?

例如,下面的句子

"They all like to go there on 5th November 2010, but I am not interested."

如果自定义短语是“我不感兴趣”,则应按如下方式标记和标记化。

[('They', 'PRP'), ('all', 'VBP'), ('like', 'IN'), ('to', 'TO'), ('go', 'VB'), 
('there', 'RB'), ('on', 'IN'), ('5th November 2010', 'DATE'), (',', ','),
('but', 'CC'), ('I am not interested', 'CUSTOM'), ('.', '.')]

任何建议都会有用。

最佳答案

正确的答案是编译一个以您想要的方式标记的大型数据集,然后在其上训练一个机器学习的词 block 划分器。如果这太耗时,简单的方法是运行 POS 标记器并使用正则表达式对其输出进行后处理。获得最长的匹配是这里的难点:

s = "They all like to go there on 5th November 2010, but I am not interested."

DATE = re.compile(r'^[1-9][0-9]?(th|st|rd)? (January|...)( [12][0-9][0-9][0-9])?$')

def custom_tagger(sentence):
tagged = pos_tag(word_tokenize(sentence))
phrase = []
date_found = False

i = 0
while i < len(tagged):
(w,t) = tagged[i]
phrase.append(w)
in_date = DATE.match(' '.join(phrase))
date_found |= bool(in_date)
if date_found and not in_date: # end of date found
yield (' '.join(phrase[:-1]), 'DATE')
phrase = []
date_found = False
elif date_found and i == len(tagged)-1: # end of date found
yield (' '.join(phrase), 'DATE')
return
else:
i += 1
if not in_date:
yield (w,t)
phrase = []

待办事项:展开DATE re,插入代码以搜索CUSTOM 短语,通过匹配POS 标签和标记使其更加复杂,并决定是否 5th 本身应该算作一个日期。 (可能不是,所以过滤掉长度为 1 且仅包含序数的日期。)

关于python - nltk 自定义分词器和标注器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3930267/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com