根据第二个表KNIME中的术语过滤一个表中的数据

时间:2016-10-05 14:22:00

标签: filtering knime

enter image description here我有一个包含几行术语的表,我想从第二个表中过滤包含句子中这些术语的行。有没有人知道如何才能做到。 谢谢

我完全按照你所展示的那样做,但我想我对基于规则的行分割器有一些问题。看到我尝试运行时遇到的错误

2 个答案:

答案 0 :(得分:3)

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

您可以使用String Manipulator节点从条款(我假设其中没有一个包含"符号)创建规则,如下所示:

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

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

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

这与我对previous question的回答类似,唯一的补充是\Q\E quoting patterns

在此之后,您可以在Rule-based Row Filter (Dictionary)Rule-based Row Splitter (Dictionary)节点中将这些用作规则列。 (我这次没试过,但应该工作。)

Everything together as a KNIME workflow

答案 1 :(得分:0)

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

  1. 使用Strings to Document将文本转换为文档,将文本列指定给Title。事先使用Constant Value节点创建两个空字符串列,即一个用于Authors,另一个用于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将单词包转换回文档向量,将TermOccurs指定为vector value并使用As collection cell选项。您现在应该有一个表格,其中只包含包含您任何条款的文档。
  7. 使用Document Data Extractor(选择Source)获取每个文档的行ID,并使用RowID进行分配。
  8. 使用Reference Row Splitter根据行ID将表拆分为两个:
    • 一个不包含与您的任何词典术语匹配的文档,
    • 另一个包含至少与一个词匹配的文档。
  9. 如果您想再次使用字符串列,则可以在步骤1之前始终将表与原始列连接。

    我还没有对上述工作流程进行测试,如果不能正常工作,请让我发布。另外,由于使用了标记器,您可能会遇到一些多项搜索问题。后者是使用文本处理节点时的主要挑战。