在Excel中查找Bigrams

时间:2014-01-21 17:24:10

标签: excel excel-vba sentiment-analysis vba

假设我在Excel中的列中有两个单词对的列表。这些单词由空格分隔,因此典型的一对可能看起来像“极度幸福”。目标是在另一列中的较大字符串中搜索这些“bigrams”。问题是只有当两个单词在一起并用空格分隔时才能找到二元组。如果Excel可以在给定的较大字符串中的任何位置查找两个单词,那将更可取。至关重要的是,每个bigrams占用一个单元格,因为分数被分配给每个二元组,实际上该函数根据bigram单元格值使用VLOOKUP这个值。将任意两个单词之间的空格改为 - 或其他角色是否有意义?有没有办法让Excel一次查找每个值(可能通过识别这个字符并两次传递更大的字符串,即每个字一次)?

示例:“昨晚的天气非常寒冷,但温暖的火焰给了我一些快乐。”

在这里,我们希望在极端词中找到“极端”这个词,并在“幸福”这个词中找到。目前Excel不会成功这样做,因为它只是寻找“极度幸福”并确定不存在这样的字符串。

如果“极度幸福”下面的行中的二元组显示“天气已给出”(由于某种原因),Excel将检查较大的字符串中是否存在该二元组并返回第二个分数。这样做是为了最终可以将每个分数加在一起。

1 个答案:

答案 0 :(得分:1)

使用几个公式可以很容易。见下面的截图:

enter image description here

逻辑很简单。假设您的二元组位于B1,我们可以在C1中输入以下内容。这将用*替换空格,这是Excel的通配符。

=SUBSTITUTE(B2," ","*")

然后我们将它连接起来给我们一个通配符的开头和结尾。

=CONCATENATE("*",SUBSTITUTE(B2," ","*"),"*")

然后我们使用一个简单的COUNTIF来反对该语句(在A1中),以便向我们返回一个出现的计数。

=COUNTIF(A2,CONCATENATE("*",SUBSTITUTE(B2," ","*"),"*"))

包含上述条件IF的简单>0支票可用于向我们提供YesNo

=IF(COUNTIF(A2,CONCATENATE("*",SUBSTITUTE(B2," ","*"),"*"))>0,"Yes","No")

如果有帮助,请告诉我们。