首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:概率文本匹配,检测文本匹配的百分比。

Java:概率文本匹配,检测文本匹配的百分比。
EN

Stack Overflow用户
提问于 2017-11-01 12:12:42
回答 1查看 978关注 0票数 1

我正在开发一个具有搜索功能的Java应用程序。现在,对于搜索,我使用的是外卡搜索。因此,如果有人搜索"Hello“,他们也会得到工具包、地狱、hello等的结果。搜索之后,我会根据他们的点击量为结果分配分数,但如何比较结果,得出结果是100%匹配或80%匹配,例如"Hello Kit",几乎与"hello Kitty”匹配。有办法这样做吗?

搜索代码:

代码语言:javascript
复制
Directory directory = FSDirectory.open(path);
 IndexReader indexReader = DirectoryReader.open(directory);
 IndexSearcher indexSearcher = new IndexSearcher(indexReader);
 Query query = new WildcardQuery(new Term("contents", "*" + str + "*"));
  TopDocs topDocs = indexSearcher.search(query, 1000);
 for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
        Document document = indexSearcher.doc(scoreDoc.doc);
        IndexableField value = document.getField("score");
        if (value != null) {
               sortedMap.put(Integer.valueOf(document.get("id")), (Integer) value.numericValue());
          } else {
               sortedMap.put(Integer.valueOf(document.get("id")), 0);
            }
  }
  indexSearcher.getIndexReader().close();
  directory.close();

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-01 12:24:21

听起来你在找戴斯的系数。下面是一个java实现:

代码语言:javascript
复制
public static double diceCoefficient(String s1, String s2)
{
    Set<String> nx = new HashSet<String>();
    Set<String> ny = new HashSet<String>();

    for (int i=0; i < s1.length()-1; i++) {
        char x1 = s1.charAt(i);
        char x2 = s1.charAt(i+1);
        String tmp = "" + x1 + x2;
        nx.add(tmp);
    }
    for (int j=0; j < s2.length()-1; j++) {
        char y1 = s2.charAt(j);
        char y2 = s2.charAt(j+1);
        String tmp = "" + y1 + y2;
        ny.add(tmp);
    }

    Set<String> intersection = new HashSet<String>(nx);
    intersection.retainAll(ny);
    double totcombigrams = intersection.size();

    return (2*totcombigrams) / (nx.size()+ny.size());
}

coefficient#Java

该算法为一对字符串分配一个从0到1的数字,该数字越高,它们就越相似。所以基本上就是你想要的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47054553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档