基于规则的ngram映射

时间:2018-11-20 17:41:23

标签: python regex python-2.7

在文本中同时出现的ngram需要与字典中剩余的字符串映射到其他人(O)

dict_ngram = {'Log':'c1','LOG entrie':'c2','log entrie block':'c3'}
sent = 'the user @ enter log = to validate log entrie in ,a log entrie block'

预期输出:

[the-O,user-O,@ -O,enter-O,log-c1,=-O,to-O,validate-O,log entrie-c2, in-O, a-O, ,-O,log entrie block-c3]

1 个答案:

答案 0 :(得分:1)

您可以将dict_ngram的键以与单词计数相反的顺序放在交替的正则表达式模式中,然后使用re.findall标记化输入字符串sent,然后使用{{1 }}以dict.get为默认值,根据dict_ngram将令牌映射到它们的值:

O

这将输出:

import re
dict_ngram = {k.lower(): v for k, v in dict_ngram.items()}
print('[%s]' % ','.join('-'.join((s.strip(), dict_ngram.get(s, 'O'))) for s in re.findall(r'%s|\S+' % '|'.join(map(re.escape, sorted(dict_ngram, key=len, reverse=True))), sent)))