如何在Python中创建一个在ungram之前得分的函数?



让我们假设我想用一个叫做dictionary的字典给text打分:

text = "I would like to reduce carbon emissions"
dictionary = pd.DataFrame({'text': ["like","reduce","carbon","emissions","reduce carbon emissions"],'score': [1,-1,-1,-1,1]})

我想写一个函数,将dictionarytext中的每一项相加。然而,这样的规则必须有一个细微差别:优先考虑图形而不是图形。

具体地说,如果我把dictionarytext中的ungram加起来,我得到:1+(-1)+(-1)+(-1)=-2自从like =1, reduce=-1, carbon =-1,emissions=-1。这不是我想要的。函数必须显示以下内容:

  1. 首先考虑ngram(本例中为reduce carbon emissions),如果ngram集合不为空,则将相应的值赋给它,否则,如果ngram集合为空,则考虑ungram;
  2. 如果图形集非空,则忽略所选图形中的单个单词(图形)(例如忽略"reduce", "carbon";和";emissions">

这样的函数应该给我这样的输出:+2sincelike =1+reduce carbon emissions = 1

我对Python很陌生,我被困住了。有人能帮我一下吗?

谢谢!

我将按长度降序对关键字进行排序,因此可以保证re将匹配one-gram之前的ngram:

import re
pat = '|'.join(sorted(dictionary.text, key=len, reverse=True))
found = re.findall(fr'b({pat})b', text)

输出:

['like', 'reduce carbon emissions']

获取预期输出:

scores = dictionary.set_index('text')['score']
scores.re_index(found).sum()

最新更新