【问题标题】:ORACLE TEXT SEARCHORACLE 文本搜索
【发布时间】:2018-01-09 19:44:24
【问题描述】:

我希望能够匹配(尽可能接近)两个文本字段。关于如何在 Oracle 中执行此操作的任何想法。我已经研究过在 Oracle Text 中使用 Context,但我不知道如何解析要输入的字段之一以包含 select 中的子句。

示例:搜索“这是红色汽车”将根据两个值中的“红色汽车”返回“红色汽车属于斯蒂芬”。

【问题讨论】:

  • 找出包含特定字符串的所有文本(例如'red car')与通过对字符串的全部内容进行评分来对字符串的相似度进行评分是有区别的。文本对第一个任务有好处,而不是对第二个任务。实际上,您给出的两个字符串不是很相似。它们有两个相同的标记——“red”和“car”——但没有其他匹配的标记。

标签: oracle oracle-text


【解决方案1】:

我认为您正在寻找的术语是字符串相似度。有a LOT of different algorithms 可供您选择,以找出两个字符串的相似程度。

但如果您想要一个快速简单的解决方案,请查看UTL_MATCH。它可以为您提供一个从 0 到 100 的简单数字分数,以确定两个字符串的相似程度。它只有 2 种算法可供选择。对于您的两个示例字符串:

utl_match.edit_distance_similarity('This is Red Car', 'Red Car belongs to Stephen') 使用基本编辑/Levenshtein 距离给出 12 分(从 0 到 100)。

utl_match.jaro_winkler_similarity('This is Red Car', 'Red Car belongs to Stephen') 给出 51 分(也是 0-100)。所以我猜你可能想用这个来达到你的目的。但是请随意在您的真实数据上尝试它们,或者尝试根据不同的知名算法编写您自己的代码(例如,我看到有人使用 Sørensen-Dice 系数)。

【讨论】:

    猜你喜欢
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    相关资源
    最近更新 更多