Openrefine:按 token/word 计数拆分多值单元格?
Openrefine: Split multi-valued cells by token/word count?
我正在为 document classification with MALLET using openrefine.
预处理大量文本数据
一些单元格很长(>150,000 个字符),我试图将它们分成 <1,000 word/token 个片段。
我可以使用 "Split multi-valued cells" 按字段长度将长单元格拆分为 6,000 个字符块,这大致可以转换为 1,000 word/token 个字符块,但它会跨行拆分单词,所以我'我丢失了一些数据。
有没有一个函数可以让我用每 6,000 个字符后的第一个空格 (" ") 拆分长单元格,或者更好的是,每 1,000 个单词拆分一次?
最简单的方法可能是按空格拆分文本,在每组 1000 个元素后插入一个非常罕见的字符(或一组字符),重新连接,然后使用 "Split multivalued cells"字符。
您可以在 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))
这是我的简单解决方案:
转到编辑单元格 -> 转换并输入
value.replace(/((\s+\S+?){999})\s+/,"@@@")
这将用@@@替换每第1000个空格(连续的空格被计为一个,如果它们出现在分割边界则被替换)(你可以选择任何你喜欢的标记,只要它不出现在原文)。
转到编辑单元格 -> 拆分multi-valued 单元格 并使用标记@@@ 作为分隔符进行拆分。
我正在为 document classification with MALLET using openrefine.
预处理大量文本数据一些单元格很长(>150,000 个字符),我试图将它们分成 <1,000 word/token 个片段。
我可以使用 "Split multi-valued cells" 按字段长度将长单元格拆分为 6,000 个字符块,这大致可以转换为 1,000 word/token 个字符块,但它会跨行拆分单词,所以我'我丢失了一些数据。
有没有一个函数可以让我用每 6,000 个字符后的第一个空格 (" ") 拆分长单元格,或者更好的是,每 1,000 个单词拆分一次?
最简单的方法可能是按空格拆分文本,在每组 1000 个元素后插入一个非常罕见的字符(或一组字符),重新连接,然后使用 "Split multivalued cells"字符。
您可以在 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))
这是我的简单解决方案:
转到编辑单元格 -> 转换并输入
value.replace(/((\s+\S+?){999})\s+/,"@@@")
这将用@@@替换每第1000个空格(连续的空格被计为一个,如果它们出现在分割边界则被替换)(你可以选择任何你喜欢的标记,只要它不出现在原文)。
转到编辑单元格 -> 拆分multi-valued 单元格 并使用标记@@@ 作为分隔符进行拆分。