门萨智商测试_与Mensa建立更好的匹配解决方案

哈宪
2023-12-01

门萨智商测试

我从事商业软件的设计和开发已有30多年的历史,我很高兴地宣布,我的一些软件第一次作为新的开源项目发布。 对于Dell的开源而言,这是一个名为Mensa的Java项目。

Mensa是一个Java类库。 因此,Mensa的主要用户是使用Java的程序员。 但是,我目前正在与一个使用C#中的Mensa(使用IKVM.NET )的团队合作,但这是另一个话题。 如果您对此特别感兴趣,请随时与我联系。

曼萨简而言之

Mensa为一类模式匹配问题提供了强大而有效的解决方案。 具体来说,Mensa可以轻松地在源文本中查找任何或所有出现的任何关键字。 例如,在小说(源文本)中找到对命名字符(关键字)的所有引用。

Mensa的效率很高,因为它将单次快速处理源文本,而不管它是在搜索一个关键字还是一百万个关键字。

Mensa是通用的,它不限于匹配文本数据。 相反,根据定义,源文本是任意长的符号序列。 这些符号的实际数据类型可以是任何东西-字符,字节,数字,象形文字,音符,核苷酸等。

项目历史

多年来,从Quest Software开始,一直到Dell软件(在收购一家公司之后),Mensa的核心贡献者一直致力于开发平台技术,以发现,映射和集成各种企业信息源之间断开连接的数据。 这种解决方案的关键要素之一就是能够准确,高效地找到东西。

最近,我们致力于提供自动数字资产分类技术,例如Dell One Identity Manager数据治理版分类模块所使用的那些技术。

我们一直在使用许可的第三方软件进行基于字典的关键字搜索,但是由于种种原因,我们知道最终将需要更换组件。 大约一年前,我们开始寻找开源替代方案。 但是,没有可用的开源解决方案具有我们一直在寻找的所有要素:泛型,灵活性,模糊匹配,大型词典效率等。

因此,在2014年初,我着手创建了一个新的“ Java Aho-Corasick库”,它将满足所有这些要求。 后来,我们将名称更改为“ Mensa”。

Java中的标准模式匹配

标准Java库支持在字符串中查找特定模式。 有两种基本机制可供选择:

  • 字符串搜索在另一个字符串中找到文字字符串值的实例。 例如,您可以在文本“ Welcome to Ann Arbor”中搜索“ Arbor”一词。 结果将表明在第15位找到了该单词(Java从零开始计数)。
  • 正则表达式匹配在另一个字符串中查找字符串模式的实例。 例如,您可以在“欢迎来到安娜堡”中搜索模式“ A ... r”。 “。” 模式中的意思是“任何字符”,因此也会在位置15找到匹配项。

在许多情况下,这些内置的Java功能可以正常工作,但并非总是如此。 请考虑以下问题情形:

  1. 标准库函数对内存中的字符串进行操作。 它们不适合搜索无法轻易完全存储在内存中的超大文本。
  2. 内置的正则表达式可以识别单词边界,但是比简单的字符串文字匹配需要更多的处理时间。 例如,不考虑单词边界,“ boy”将匹配“ 30天抵制”,这通常不是您想要的。
  3. 标准库功能无法很好地扩展以查找大量关键字。 您可以选择:
    • 对每个关键字执行单独的文字(或正则表达式)搜索操作
    • 创建一个正则表达式,其中包含每个关键字的替代子句。

随着关键字数量的增加,这些方法在性能方面会受到影响。 标准库功能仅限于在字符文本中查找字符关键字。 无法使用内置函数,例如在1000万个整数数组中查找所有“ 317、206、827、1106”序列。

使用Mensa可以轻松分别处理以下每种情况:

    • Mensa使用抽象文本源进行操作。 提供了针对内存中文本流和流式文本源的实现。 另外,很容易为自定义源创建新的文本源实现。 例如,您可以创建一个文本源,该文本源从数据库,版本控制系统,REST API等读取。
    • Mensa有启用或禁用单词边界检查的选项。 启用后,仅当由单词边界符号分隔时才识别关键字。 构成单词边界符号的内容由抽象符号分类器确定。 提供了字符符号的实现,但是您也可以创建自定义符号分类器。 例如,基因搜索应用程序可以将某些核苷酸定义为基因边界。
    • 构造Mensa机器后,其性能仅取决于要搜索的文本的长度,而不取决于关键字的数量。 给定的计算机实例可以被任意次数使用,甚至可以被并发线程使用,以搜索多个文本源。
    • Mensa使用Java泛型实现。 因此,它可以用来匹配Java模板类型S定义的任何类型的符号。这样,可以创建一个机器来匹配字节,字符,整数,基因序列,位序列等。

Mensa用例示例

假设您的公司有一个内部公司门户网站,其中包含成千上万个网页。 您被要求编写一个程序来确定每个员工在该门户中的任何地方被提及的次数。 您可以访问HR数据库,其中包含公司的全名,有时还包括公司中每位员工的昵称,其中大约有25,000。

在很高的层次上,基于Mensa的解决方案看起来像这样:

      1. 创建Mensa关键字集合。
      2. 从HR数据库中读取员工的全名和昵称,然后将它们添加到关键字集合中。
      3. 创建一个Mensa匹配机。
      4. 用关键字集合初始化它。
      5. 对于Web门户中的每个页面,请基于该页面创建一个Mensa文本源,然后针对该源运行匹配的计算机。 结果是该页面的匹配关键字列表(以及雇员姓名或昵称)。

Mensa提供了将任意数据(称为用户数据)与每个关键字相关联的功能。 此附加信息包含在任何匹配结果中。 对于此应用程序,使用此功能存储每个关键字的员工身份将很有用。

这对昵称尤为重要-例如,公司中很容易有多个“安迪”。 这样,每次匹配机器报告匹配项时,您不仅会知道匹配项的文本,而且还会知道所提及的特定员工。

学到更多

如果这激发了您的模式匹配需求,请跳至Mensa项目站点 ,您可以在其中浏览Mensa Wiki并查看Mensa源代码示例 。 然后,下载最新版本并构建一些很棒的东西!

翻译自: https://opensource.com/business/15/2/building-better-matching-solution-mensa

门萨智商测试

 类似资料: