我之前在社区的帮助下为此制定了一个很好的解决方案,它工作得很好,但我发现它只能处理后缀词(它不会忽略前缀词)。
公式:
=IF(B1<>"";(LEN(A1)-LEN(SUBSTITUTE(A1;B1&" ";"")))/(LEN(B1)+1)+IF(RIGHT(A1;LEN(B1))=B1;1;0);"")
A 包含句子,多个单词(没有标点符号)
B 包含我想要计算确切频率的单词。
C 这里有公式,我得到结果
样本表:
| A | B | C |
|:-------------------------:|:----:|:--------:|
| boots | shoe | 0 |
----------------------------------------------|
| shoe | shoe | 1 |
----------------------------------------------|
| shoes | shoe | 0 |
----------------------------------------------|
| ladyshoe dogshoe catshoe | shoe | 3 |
----------------------------------------------|
在C列中,我在第1行,第2行和第3行中得到正确的输出,但不是4 。我希望C4应该返回0
而不是3
。
问题是它与shoexxxxxxxxxxx
不匹配(正确)但匹配xxxxxxxxxxxshoe
(错误)。
我只希望公式计算shoe
的完全匹配,不应计算任何其他字数。
答案 0 :(得分:1)
你想要这个公式:
=IF(B1<>"",(LEN(A1)-LEN(SUBSTITUTE(A1," "&B1&" ","")))/(LEN(B1)+2),"")+IF(A1=B1,1,0)+IF(LEFT(A1,LEN(B1)+1)=B1&" ",1,0)+IF(RIGHT(A1,LEN(B1)+1)=" "&B1,1,0)
我会用*
表示一个空格,以使以下内容更清晰:
有四种情况需要考虑:
string
;这个词在两边都没有空格(因此是单元格A1
string*
;这个词出现在单词列表的开头。*string
;这个词出现在单词列表的末尾。*string*
;这个词就在一个单词列表的中间。首先,我们计算*string*
的出现次数,将"*string*"
替换为""
,从旧字符串中减去新字符串的长度,然后除以len(string)+2
}(这是*string*
)的长度。
如果A1
正好是string
,那么我们会在计数中再添加一个,而且两边都没有空格。
如果A1
以string*
开头,我们会再添加一个;如果A1
以*string
结尾,我们会再添加一个。