Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javalib:具有不同语义的文本分析器_Java_Compare_Analysis_Lexical Analysis - Fatal编程技术网

javalib:具有不同语义的文本分析器

javalib:具有不同语义的文本分析器,java,compare,analysis,lexical-analysis,Java,Compare,Analysis,Lexical Analysis,我需要一个java库来比较两个不同的文本,并告诉我它们是否相关 例如,我会比较其中一个 a) 成分150.00 MG X 20.00 UN b) “成分150.00 MG X 60.00 UN” 用这个 c) “150毫克成分rec.x 20” 图书馆应该告诉我,第一个对应,第二个不对应,因为a)和c)都提到了一种药物,它以“150mg胶囊和20个单位的包装”呈现,而b)指的是60个单位的包装 我的另一个想法是关于正则表达式,但我对它们不太感兴趣,所以我请求您的帮助 提前感谢。实现Compara

我需要一个java库来比较两个不同的文本,并告诉我它们是否相关

例如,我会比较其中一个

a) 成分150.00 MG X 20.00 UN

b) “成分150.00 MG X 60.00 UN”

用这个

c) “150毫克成分rec.x 20”

图书馆应该告诉我,第一个对应,第二个不对应,因为a)c)都提到了一种药物,它以“150mg胶囊和20个单位的包装”呈现,而b)指的是60个单位的包装

我的另一个想法是关于正则表达式,但我对它们不太感兴趣,所以我请求您的帮助


提前感谢。

实现Comparable接口并覆盖CompareTo方法。
如果找不到答案,请用其他示例解释问题。

如果文本变量的结构始终相同,则正则表达式可能是解决此问题的一种方法。基本上,你要对照一组表达式检查每个文本,看它们是否匹配。根据变量的不同程度,表达式可能简单,也可能需要更复杂

对于上述情况,第一个表达式可以如下所示:

成分150.00 MG X 20.00 UN
->
(标识符)(胶囊重量)X(数量单位)

由此可导出以下表达式:
^COMP(\d+(?:\。\d+))MG X([\d]+(?:\。\d+))UN$

(这假设空格数始终相等,并且始终使用
MG
UN

第二句话:

150 mg成分rec.x 20
->
(胶囊重量)成分rec.x(数量包装)

可以派生以下表达式:
^(\d+(?:\。\d+))mg comp\.rec\.x(\d+(?:\。\d+)$

您将看到两个表达式都包含以下部分两次:
([\d]+(?:\。\d+)

例如,这些部分将数字捕获到一个组中,然后允许您将该文本解析为一个
双精度
。 下面是该子表达式的简短分解:

  • (…)
    是一个捕获组,即您可以直接访问与该组匹配的部件
  • \d+
    表示一个或多个数字
  • \。
    是文字点
  • (?:…)
    是一个非捕获组,即您可以应用量词,但不能直接访问匹配的部分
通过以上部分,您可以得到以下信息:

  • (?:\。\d+)
    表示最多一个点,后跟至少一个数字。这将匹配
    .123
    ,但不匹配
    .1.2.3
    1。
  • (\d+(?:\。\d+))
    表示至少一个数字,可以选择后跟一个点,该点后跟至少一个以上的数字。这将匹配
    1.23
    12.3
    123
    ,但不匹配
    1.
    .2
    1.2.3
如果您有这些表达式,请在文本上应用正确的表达式(如果您知道,则先测试),然后提取这两个组。然后比较这些组的值


注意:不要忘记,在Java字符串中,您必须转义反斜杠,因此
\d
将被写成
“\\d”
等。

您知道这些文本的结构吗?变量是否总是以相同的方式构造?我不太明白这将如何解决所描述的问题。您可能想知道“成分150.00 MG X 20.00 UN”和“150 MG成分rec.X 20”是否相似。在这种情况下,哪个更大或更小并不意味着什么。即使是这样,OP要求的将是实现这种比较。谢谢prabhat,但我的问题比这更复杂。我打算做的是从数据库中的不同表中读取两列(它们以上述格式保存数据),并检查哪些是相关的。要做到这一点,我需要一个能够理解即使他们说的不一样,他们的意思也一样的分析者。就像我上面的例子,其中a)和c)是相关的。谢谢托马斯!我会检查的!同时,如果有人知道我如何不用自己编写代码就能实现这一点,我将不胜感激。我确信在web上的某个地方有一个jar,我可以使用它。@user1269388除非这是一种标准格式,否则我想说的是,很难找到一个库来提供任何编码或类似编码的配置所需的内容。