Nlp Openrefine:按标记/字数拆分多值单元格?

Nlp Openrefine:按标记/字数拆分多值单元格?,nlp,openrefine,Nlp,Openrefine,我有大量的文本数据,正在进行预处理以供使用 有些单元格很长(>150000个字符),我正在尝试将它们分割成最简单的方法可能是将文本按空格分割,在每组1000个元素后插入一个非常罕见的字符(或一组字符),重新连接,然后对奇怪的字符使用“分割多值单元格” 您可以在GREL中实现这一点,但选择“Python/Jython”作为脚本语言将更加清晰 所以:编辑单元格->变换->Python/Jython: my_list = value.split(' ') n = 1000 i = n while i

我有大量的文本数据,正在进行预处理以供使用


有些单元格很长(>150000个字符),我正在尝试将它们分割成最简单的方法可能是将文本按空格分割,在每组1000个元素后插入一个非常罕见的字符(或一组字符),重新连接,然后对奇怪的字符使用“分割多值单元格”

您可以在GREL中实现这一点,但选择“Python/Jython”作为脚本语言将更加清晰

所以:编辑单元格->变换->Python/Jython:

my_list = value.split(' ')

n = 1000
i = n
while i < len(my_list):
    my_list.insert(i, '|||')
    i+= (n+1)

return " ".join(my_list)
然后可以使用| | |作为分隔符进行拆分


如果您喜欢按字符而不是按单词拆分,则可以使用以下两行代码进行拆分:


以下是我的简单解决方案:

转到编辑单元格->变换,然后输入

value.replace(/((\s+\S+?){999})\s+/,"$1@@@")
这将用@@@替换每1000个空格(连续空格计为一个,如果它们出现在分割边框上,则会被替换)(您可以选择任何您喜欢的标记,只要它不出现在原始文本中)


转到编辑单元格->拆分多值单元格,并使用标记@@作为分隔符进行拆分。

好主意。我想知道我们是否可以修改这个正则表达式,使其仅在一个点后拆分,这样可以在每个块中获得完整的句子:
value.replace(/((\s+\s+?){999,})\s+(\)/,“$0@”)
谢谢。下面提供的Python/Jython更清楚地说明了它的工作原理,但这更容易实现。一段时间后分开也是一个明智的想法。如何修改该函数以在句点、问号或感叹号后拆分?只需使用此函数:
value.replace(/((\s+\s+?){999,})\s+[\.\?!]/,“$0@”)
。它现在分成至少1000个字符长的段,然后一直到下一个句号,问号或感叹号。嗯,看起来最后一个正则表达式有问题。可能是某个地方的无限循环。这很奇怪,因为它对我有效。您是否收到错误消息或只是什么都没有发生。你的测试语料库是否足够容纳1000个单词?对于测试,我总是将999减为9。也许你可以试试这个。
import textwrap

return "|||".join(textwrap.wrap(value, 6000))
value.replace(/((\s+\S+?){999})\s+/,"$1@@@")