0

我有一个问题要解决,这对我来说似乎很有挑战性,但我无法找到解决这个问题的方法。我试过谷歌搜索,但没有找到任何具体的方向。

我正在寻找一些指针、想法、相关材料、一些算法的名称等。

问题

建立书名列表。例如,给定一个文本“如果可以,我会笑着生活,就像魅力王子一样” 一个可能的书单是

  • 如果允许我的话
  • 今晚我会
  • 欢笑和生活 在 Timbackto
  • 像魅力王子一样

希望有一个像上面这样的简短列表,而不是像一个长列表。

  • 如果 我死了
  • 今晚可能会死
  • 我将 重生
  • 笑和
  • 像国王一样生活
  • 海伦王子 陷入困境
  • 住在山上魅力
  • ...

有什么可用的

可用的是提供查找和搜索服务的库的 API。查找在给定书名的情况下执行特定搜索,其中搜索提供给定关键字的书籍列表。

一些额外的约束

  • 我们可以做些什么来使结果尽可能短?我们能找到最优解吗?
  • 我们如何才能最大限度地减少不匹配的单词?
  • 我们如何使用本地兑现来改进对频繁句子的搜索?

谢谢

4

1 回答 1

0

一个天真的解决方案可能如下:

对于搜索中的每个单词,搜索所有匹配的书名。

然后对于每个候选人,计算标记化的书名和搜索中的所有单词之间的相关性分数。

一个基本的相关函数可能是这样的:

public double correlation(String[] a, String[] b, int offset)
{
  double ret = 0.;
  int maxI = Math.min(a.length, b.length - offset);
  for(int i = 0 ; i < maxI ; i++)
  {
    ret += a[i].equals(b[i+offset]) / maxI;
  }
}

使用偏移参数是为了具有移位鲁棒性。

然后你可以用这个分数对你的书名进行排序。

干杯

于 2013-07-18T08:50:28.470 回答