【发布时间】:2016-10-05 14:21:59
【问题描述】:
【问题讨论】:
【问题讨论】:
(免责声明:我对文本处理扩展不熟悉,如果术语和句子来自那些并且与字符串不兼容,我希望其他人可以帮助你。)
您可以使用 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) 节点中使用这些作为规则列。 (这次我没试过,但应该可以。)
【讨论】:
假设每个句子都是表格中的一行,下面是使用 KNIME 的文本处理节点的方法:
Strings to Document 将文本转换为文档,将您的文本列分配给Title。预先使用Constant Value 节点创建两个空字符串列,即一个作为Authors 提供,另一个作为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 指定为vector value 并使用As collection cell 选项将单词包转换回文档向量。您现在应该有一个表格,其中仅包含包含您的任何条款的文档。Document Data Extractor获取每个文档的行ID(选择Source)并使用RowID进行分配。Reference Row Splitter 根据行 ID 将表一分为二:
如果您想再次拥有字符串列,您可以随时将表与第 1 步之前的原始表连接起来。
我尚未测试上述工作流程,如果它不起作用,请随时通知我。另外,由于分词器,您可能会在多词搜索方面遇到一些麻烦。后者是使用文本处理节点时的主要挑战。
【讨论】: