智能推荐

语义距离

可以方便地计算两个词汇之间的距离,意义越相近,距离越小:

String[] wordArray = new String[]
        {
                "香蕉",
                "苹果",
                "白菜",
                "水果",
                "蔬菜",
                "自行车",
                "公交车",
                "飞机",
                "买",
                "卖",
                "购入",
                "新年",
                "春节",
                "丢失",
                "补办",
                "办理",
                "送给",
                "寻找",
                "孩子",
                "教室",
                "教师",
                "会计",
        };
for (String a : wordArray)
{
    for (String b : wordArray)
    {
        System.out.println(a + "\t" + b + "\t之间的距离是\t" + CoreSynonymDictionary.distance(a, b));
    }
}
  • 设想的应用场景是搜索引擎对词义的理解,词与词并不只存在“同义词”与“非同义词”的关系,就算是同义词,它们之间的意义也是有微妙的差别的。
  • 算法上,为每个词分配一个语义ID,词与词的距离通过语义ID的差得到。语义ID通过《同义词词林扩展版》计算而来。

智能推荐

也就是文本推荐(句子级别,从一系列句子中挑出与输入句子最相似的那一个):

Suggester suggester = new Suggester();
String[] titleArray =
(
        "威廉王子发表演说 呼吁保护野生动物\n" +
        "《时代》年度人物最终入围名单出炉 普京马云入选\n" +
        "“黑格比”横扫菲:菲吸取“海燕”经验及早疏散\n" +
        "日本保密法将正式生效 日媒指其损害国民知情权\n" +
        "英报告说空气污染带来“公共健康危机”"
).split("\\n");
for (String title : titleArray)
{
    suggester.addSentence(title);
}

System.out.println(suggester.suggest("发言", 1));       // 语义
System.out.println(suggester.suggest("危机公共", 1));   // 字符
System.out.println(suggester.suggest("mayun", 1));      // 拼音
  • 在搜索引擎的输入框中,用户输入一个词,搜索引擎会联想出最合适的搜索词, HanLP 实现了类似的功能。
  • 可以动态调节每种识别器的权重