让我们假设我想用一个叫做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]})
我想写一个函数,将dictionary
中text
中的每一项相加。然而,这样的规则必须有一个细微差别:优先考虑图形而不是图形。
具体地说,如果我把dictionary
中text
中的ungram加起来,我得到:1+(-1)+(-1)+(-1)=-2
自从like =1, reduce=-1, carbon =-1,emissions=-1
。这不是我想要的。函数必须显示以下内容:
- 首先考虑ngram(本例中为
reduce carbon emissions
),如果ngram集合不为空,则将相应的值赋给它,否则,如果ngram集合为空,则考虑ungram; - 如果图形集非空,则忽略所选图形中的单个单词(图形)(例如忽略"reduce", "carbon";和";emissions">
这样的函数应该给我这样的输出:+2
sincelike =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()