【问题标题】:Filtering data from one table based on terms in second table KNIME根据第二个表 KNIME 中的术语从一个表中过滤数据
【发布时间】:2016-10-05 14:21:59
【问题描述】:

我有一个包含几行术语的表,我想从第二个表中过滤包含句子中这些术语的行。有谁知道如何做到这一点。 谢谢

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

【问题讨论】:

    标签: filtering knime


    【解决方案1】:

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

    您可以使用 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) 节点中使用这些作为规则列。 (这次我没试过,但应该可以。)

    【讨论】:

    • 感谢您的快速回复。如果我的术语在一个表中,而带有要在单独表中过滤的字符串的表中,并且两个表中的行数不匹配,我该如何加入它们?
    • 您不必加入他们。规则表是字典节点的第二个输入。
    • 实际上我的术语包含 " 符号,因为它们属于文档类型。我可以以某种方式删除它吗?
    • 抱歉,我好像迷路了。无论我尝试什么,它都不起作用。假设在我的术语表中,我有(只是示例):“Adam Gober”,第二行是“Tall group”等。在我的表中,我有类似“从前亚当戈伯去上学了”。我无法过滤这些句子。我尝试了您的建议,但不断出现错误。感谢您的帮助
    【解决方案2】:

    假设每个句子都是表格中的一行,下面是使用 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获取每个文档的行ID(选择Source)并使用RowID进行分配。
    8. 使用 Reference Row Splitter 根据行 ID 将表一分为二:
      • 不包含与您的任何字典术语匹配的文档,
      • 另一个包含至少在一个词上匹配的文档。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-07
      • 2017-03-29
      • 1970-01-01
      • 1970-01-01
      • 2021-08-19
      • 1970-01-01
      • 2023-04-05
      • 2012-08-13
      相关资源
      最近更新 更多