我有大量的文本数据,我正在使用openrefine对openrefine进行预处理。
有些单元格是长的(>15万字符),我试图将它们分割成<1000个单词/标记段。
我可以用“拆分多值单元格”按字段长度将长格分割成6000个字符块,这大致可以转换成1000个单词/标记块,但是它会将单词分割成行,所以我丢失了一些数据。
我能用一个函数在每6,000个字符之后用第一个空格(“")分割长格吗?或者更好的是,每1,000个单词拆分一次?
发布于 2018-04-05 01:37:47
以下是我的简单解决方案:
转到编辑单元 -> Transform并输入
value.replace(/((\s+\S+?){999})\s+/,"$1@@@")
这将替换每1000个空格(连续的空格被计算为一个空格,如果它们出现在分隔边框中,则替换它们)为@@(只要没有出现在原始文本中,就可以选择任意标记)。
“转到编辑单元格” -> 拆分多值单元格并使用令牌@@分隔符进行拆分。
发布于 2018-04-04 23:26:07
最简单的方法可能是按空格拆分文本,在每组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)
(有关此脚本的说明,请参见这里)
下面是一个更紧凑的版本:
text = value.split(' ')
n = 1000
return "|||".join([' '.join(text[i:i+n]) for i in range(0,len(text),n)])
然后,您可以使用\分隔。
如果您更喜欢按字符而不是按单词进行拆分,那么您可以用textwrap
用两行进行拆分:
import textwrap
return "|||".join(textwrap.wrap(value, 6000))
https://stackoverflow.com/questions/49663436
复制