【问题标题】:How to make a small engine like Wolfram|Alpha?如何制作像 Wolfram|Alpha 这样的小型引擎?
【发布时间】:2023-04-01 20:16:01
【问题描述】:

假设我有三个模型/表:operating_systemswordsprogramming_languages

# operating_systems
name:string created_by:string family:string
Windows     Microsoft         MS-DOS
Mac OS X    Apple             UNIX
Linux       Linus Torvalds    UNIX
UNIX        AT&T              UNIX

# words
word:string defenitions:string
window      (serialized hash of defenitions)
hello       (serialized hash of defenitions)
UNIX        (serialized hash of defenitions)

# programming_languages
name:string created_by:string example_code:text
C++         Bjarne Stroustrup #include <iostream> etc...
HelloWorld  Jeff Skeet        h
AnotherOne  Jon Atwood        imports 'SORULEZ.cs' etc...

当用户搜索hello时,系统会显示'hello'的定义。这相对容易实现。但是,当用户搜索UNIX 时,引擎必须选择:wordoperating_system。此外,当用户搜索windows(小写字母'w')时,引擎会选择word,但也应该显示Assuming 'windows' is a word. Use as an &lt;a href="etc.."&gt;operating system&lt;/a&gt; instead

谁能通过解析和选择搜索查询的主题为我指明正确的方向?谢谢。


注意:它不需要像 WA 那样能够执行计算。

【问题讨论】:

    标签: ruby-on-rails parsing prediction wolframalpha


    【解决方案1】:

    有一个名为 terms 的新索引表,其中包含每个有效术语的标记化版本。这样,您只需搜索一张表。

    # terms
    Id Name     Type               Priority
    1  window   word               false
    2  Windows  operating_system   true
    

    然后您可以看到用户搜索词的匹配程度。 IE。 “Windows”将与2 100% 匹配——因此假设,但也与1 密切匹配,因此建议将其作为替代方案。您必须编写自己的规则引擎来决定单词匹配的接近程度(即“windows”与“Windows”的假设是什么?)如果规则引擎无法决定,Priority 字段可能是最终决定者,并且理论上可以由用户活动驱动,因此它可以了解用户更可能指的是什么。

    【讨论】:

    • 谢谢,我去看看。
    • 我成功了!我使用部分来显示数据。每个主题一个部分。
    【解决方案2】:

    以及如何以数据库表的形式缓存所有关键字。

    搜索查询应该是这样的:

    SELECT * FROM keywords WHERE keyword = '<YourKeyWord>'   /* mysql */
    

    keywords 表将包含对您的模块的某种引用。

    这种方法的优点当然是搜索速度快。

    您可以使用两个查询来模拟您要求的行为:

    • 完全匹配(在 mysql 中没问题)
    • 不区分大小写的搜索

    【讨论】:

      【解决方案3】:

      Wolfram Alpha 比您的示例复杂得多...我不确定它的内部工作原理(我对它的阅读很少),但我相信它是一个非常庞大且复杂的 automated inference system。它们实现起来相当简单(Prolog 基本上是一个通用的,你可以将任何你需要的数据放入其中),但它们很难发挥作用。

      【讨论】:

        猜你喜欢
        • 2013-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-14
        • 2019-01-21
        • 2012-01-25
        相关资源
        最近更新 更多