我正在寻找相似性度量来比较具有可能转置的单词的短语,例如“扩展金额”和“金额扩展”。 我试过的那些已经为我的目的过多地惩罚了那些换位。是否存在字符串相似性函数,不会惩罚或仅略微惩罚这些转置,或者我是否只能通过标记化和计算令牌上的个体相似性来满足地解决此用例?
import org.apache.lucene.search.spell.*;
public class SimilarityTest
{
public static void main(String[] args)
{
String original = "amounts extended";
String transposed = "extended amounts";
StringDistance[] distances =
{new NGramDistance(),new JaroWinklerDistance(),new LevensteinDistance()};
for(StringDistance dist: distances) System.out.println(String.format("%18s",dist)+" "+dist.getDistance(original, transposed));
}
}
输出
ngram(2) 0.125
jarowinkler(0.7) 0.5416667
levenstein 0.125
答案 0 :(得分:2)
我不确定它是否符合您的目的,因为您没有指定它,而且本身本身,但是您应该检查一下你可以使用bag of words。
要实现距离度量,您可以将其与机器学习技术结合使用,或者,如果输入很小,则可能计算每对单词之间的字符串距离并求解assignment problem(请参阅Hungarian Algorithm })