门萨智商测试
我从事商业软件的设计和开发已有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功能可以正常工作,但并非总是如此。 请考虑以下问题情形:
随着关键字数量的增加,这些方法在性能方面会受到影响。 标准库功能仅限于在字符文本中查找字符关键字。 无法使用内置函数,例如在1000万个整数数组中查找所有“ 317、206、827、1106”序列。
使用Mensa可以轻松分别处理以下每种情况:
假设您的公司有一个内部公司门户网站,其中包含成千上万个网页。 您被要求编写一个程序来确定每个员工在该门户中的任何地方被提及的次数。 您可以访问HR数据库,其中包含公司的全名,有时还包括公司中每位员工的昵称,其中大约有25,000。
在很高的层次上,基于Mensa的解决方案看起来像这样:
Mensa提供了将任意数据(称为用户数据)与每个关键字相关联的功能。 此附加信息包含在任何匹配结果中。 对于此应用程序,使用此功能存储每个关键字的员工身份将很有用。
这对昵称尤为重要-例如,公司中很容易有多个“安迪”。 这样,每次匹配机器报告匹配项时,您不仅会知道匹配项的文本,而且还会知道所提及的特定员工。
如果这激发了您的模式匹配需求,请跳至Mensa项目站点 ,您可以在其中浏览Mensa Wiki并查看Mensa源代码示例 。 然后,下载最新版本并构建一些很棒的东西!
翻译自: https://opensource.com/business/15/2/building-better-matching-solution-mensa
门萨智商测试