1

在此处输入图像描述我有一个包含几行术语的表,我想从第二个表中过滤包含句子中这些术语的行。有谁知道如何做到这一点。谢谢

我完全按照您的说明做了,但我想我对基于规则的行拆分器有一些问题。查看我尝试运行它时遇到的错误

4

2 回答 2

3

(免责声明:我对文本处理扩展不熟悉,如果术语和句子来自那些并且与字符串不兼容,我希望其他人可以帮助你。)

您可以使用 String Manipulator 节点从术语(我假设它们都不包含"符号)创建规则,如下所示:

join("$yourSentenceColumn$ MATCHES \".*?\\Q", $yourTermColumn$, "\\E.*\" => TRUE")

如果您的条款包含引号符号(但您不希望它们匹配):

join("$yourSentenceColumn$ MATCHES \".*?\\Q", removeChars($yourTermColumn$, "\""), "\\E.*\" => TRUE")

这类似于我对您上一个问题的回答,唯一的补充是\Q\E 引用模式

在此之后,您可以在基于规则的行过滤器(字典)基于规则的行拆分器(字典)节点中使用这些作为规则列。(这次我没有尝试过,但应该可以。)

一切作为一个 KNIME 工作流程

于 2016-10-05T14:51:45.997 回答
0

假设每个句子都是表格中的一行,下面是使用 KNIME 的文本处理节点的方法:

  1. 用于Strings to Document将文本转换为文档,将您的文本列分配给Title. 预先使用Constant Valuenode 创建两个空字符串列,即一个提供 asAuthors和另一个 for Full Text,并RowID预先申请创建一个包含 ID 的列(您将方便Source地为上述Strings to Document节点提供);
  2. 使用 转换表Bag of Words Creator
  3. 将要搜索的术语表连接到 的底部端口Dictionary Tagger,同时将词袋连接到上部端口。在这里设置很重要named entities to unmodifiable。如果您愿意,您还可以使搜索不区分大小写。至于标签,只需将它们设置为NE(命名实体)。
  4. 跟随上一个节点Modifiable Term Filter- 应过滤掉可修改的术语,从而为您留下与您的字典完全对应的术语列表。但是,有一个区别:每个术语现在都与找到它的每个文档相关联。
  5. 用于Constant Value创建一个包含数字的整数列1并为其命名,例如TermOccurs.
  6. Document vector使用、分配TermOccursasvector value和使用As collection cell选项将词袋转换回文档向量。您现在应该有一个表格,其中仅包含包含您的任何条款的文档。
  7. Document Data Extractor使用(选择)获取每个文档的行 ID,Source并使用RowID.
  8. 用于Reference Row Splitter根据行 ID 将表拆分为两个:
    • 一个不包含与您的任何字典术语匹配的文档,
    • 另一个包含至少在一个词上匹配的文档。

如果您想再次拥有字符串列,您始终可以在步骤 1 之前将表与原始表连接起来。

我还没有测试过上述工作流程,如果它不起作用,请随时通知我。另外,由于分词器,您可能会在多词搜索方面遇到一些麻烦。后者是使用文本处理节点时的主要挑战。

于 2017-03-21T00:19:17.610 回答