【发布时间】:2014-09-01 16:31:15
【问题描述】:
背景
我正在开发一款游戏分析软件,我必须将句子转换为我所谓的“句子模板”,并将这些句子模板与存储在 Excel 工作表中的标准模板进行匹配。根据是否找到匹配项,需要采取一些措施。整个程序在 Excel-VBA 中。
例如,如果句子是:
传球左平 T.Harry 最近的防守者
对应的句子模板为:
传球 $DIR$ 平 $NAME$ 最近的防守者
因此,句子模板将句子中的“可变”词替换为我所说的“面具”。因此$DIR$ 可以表示“left”、“right”或“center”中的任何一个,它仍将表示相同的句子模板。同样,G.Jones 可以替换 T.Harry,它仍然是相同的模板。
除了 $DIR$ 和 $NAME$ 之外,还使用了大约六种不同类型的掩码。大约有 1200 个标准模板。
问题:
屏蔽是通过一个不能 100% 万无一失的程序完成的,因为被屏蔽的单词,尤其是名称,有很多变体。例如,T.Harry 可以简称为 Harry 或 T. Harry(中间有空格)或 Tom Harry。我需要有某种方法来确定句子中的所有其他单词是否与除了掩码之外的 1200 个模板中的任何一个单词匹配。如果出现这种“LIKE”匹配,很可能是同一个句子模板,只要满足某些其他过滤条件,就可以认为是同一个句子模板,置信度很高。
Mask 可以出现在句子的任意位置,没有固定的位置。
我的方法(我认为这是低效的并且是蛮力的)
a) 使用 Split 函数将 1200 个标准句子模板中的每一个拆分成单词
b) 使用Split函数将要比较的句子也拆分成单词
c) 使用以下逻辑将“b”中的单词与循环中的 1200 个模板中的每一个匹配
d) 将句子模板中的单词与标准句子模板中的单词保持匹配,直到一个单词不匹配。如果单词不匹配,请跳过该单词并继续下一个单词。继续匹配,直到不匹配的单词超过掩码数。
e) 如果不匹配的单词超过了掩码的数量,则很可能不是同一个句子。
f) 如果不匹配的单词等于或小于掩码的数量,并且除了掩码之外,所有其他单词都匹配,则具有很高的置信度,它是同一个句子模板。
有没有更好的方法来做到这一点?有没有办法我们可以找到两个字符串不匹配或显示分歧的第一个字符。
帮助表示赞赏。到目前为止,当句子不匹配时,我已经寻求人工干预,但如果上述逻辑有效,那就太好了。提前致谢。
【问题讨论】: