我有一个包含几行术语的表,我想从第二个表中过滤包含句子中这些术语的行。有谁知道如何做到这一点。谢谢
我完全按照您的说明做了,但我想我对基于规则的行拆分器有一些问题。查看我尝试运行它时遇到的错误
(免责声明:我对文本处理扩展不熟悉,如果术语和句子来自那些并且与字符串不兼容,我希望其他人可以帮助你。)
您可以使用 String Manipulator 节点从术语(我假设它们都不包含"
符号)创建规则,如下所示:
join("$yourSentenceColumn$ MATCHES \".*?\\Q", $yourTermColumn$, "\\E.*\" => TRUE")
如果您的条款包含引号符号(但您不希望它们匹配):
join("$yourSentenceColumn$ MATCHES \".*?\\Q", removeChars($yourTermColumn$, "\""), "\\E.*\" => TRUE")
这类似于我对您上一个问题的回答,唯一的补充是\Q
和\E
引用模式。
在此之后,您可以在基于规则的行过滤器(字典)或基于规则的行拆分器(字典)节点中使用这些作为规则列。(这次我没有尝试过,但应该可以。)
假设每个句子都是表格中的一行,下面是使用 KNIME 的文本处理节点的方法:
Strings to Document
将文本转换为文档,将您的文本列分配给Title
. 预先使用Constant Value
node 创建两个空字符串列,即一个提供 asAuthors
和另一个 for Full Text
,并RowID
预先申请创建一个包含 ID 的列(您将方便Source
地为上述Strings to Document
节点提供);Bag of Words Creator
。Dictionary Tagger
,同时将词袋连接到上部端口。在这里设置很重要named entities to unmodifiable
。如果您愿意,您还可以使搜索不区分大小写。至于标签,只需将它们设置为NE
(命名实体)。Modifiable Term Filter
- 应过滤掉可修改的术语,从而为您留下与您的字典完全对应的术语列表。但是,有一个区别:每个术语现在都与找到它的每个文档相关联。Constant Value
创建一个包含数字的整数列1
并为其命名,例如TermOccurs
.Document vector
使用、分配TermOccurs
asvector value
和使用As collection cell
选项将词袋转换回文档向量。您现在应该有一个表格,其中仅包含包含您的任何条款的文档。Document Data Extractor
使用(选择)获取每个文档的行 ID,Source
并使用RowID
.Reference Row Splitter
根据行 ID 将表拆分为两个:
如果您想再次拥有字符串列,您始终可以在步骤 1 之前将表与原始表连接起来。
我还没有测试过上述工作流程,如果它不起作用,请随时通知我。另外,由于分词器,您可能会在多词搜索方面遇到一些麻烦。后者是使用文本处理节点时的主要挑战。