如何在OpenRefine中用布尔运算统计含单字母变体的特定词频
用OpenRefine实现古瑞典语变体词频率统计
完全可以用OpenRefine实现你要的需求,以下是具体操作步骤:
1. 统一文本大小写
先处理大小写混合的问题:
- 选中「Text of document」列,点击「编辑列」→「添加基于此列的列」,命名为「标准化文本」
- 在表达式框输入:
value.toLowerCase(),生成全小写的文本列,消除大小写差异
2. 识别单个字母差异的变体词
要匹配与目标词(比如word)仅单个字母不同的变体,最通用的方式是通过编辑距离判断(允许单个字母的替换、插入或删除)。添加一个新列提取所有符合条件的词:
- 点击「编辑列」→「添加基于此列的列」,命名为「匹配的变体词」
- 输入以下自定义表达式(把
target变量值换成你的目标词):
var target = "word"; // 按非字母字符分割成单词数组,适配古瑞典语字符 var words = value.split(/[^\p{L}]+/); // 过滤出与目标词编辑距离为1的单词 words.filter(function(w) { var d = 0; var lenDiff = Math.abs(w.length - target.length); // 长度差超过1直接排除 if (lenDiff > 1) return false; var i = 0, j = 0; while (i < w.length && j < target.length) { if (w.charAt(i) !== target.charAt(j)) { d++; if (d > 1) return false; // 长度不同时,跳过较长单词的一个字符 if (lenDiff === 1) { w.length > target.length ? i++ : j++; } else { i++; j++; } } else { i++; j++; } } // 加上剩余未匹配的字符数 d += (w.length - i) + (target.length - j); return d === 1; }).join("; ")
3. 统计变体词频率
统计各变体的出现行数
- 选中「匹配的变体词」列,点击「分面」→「列表分面」,面板中会显示每个变体词对应的出现行数(即包含该词的文档数量)
统计变体词的总出现次数(含同一行多次出现的情况)
- 再添加一个新列「变体词数量」,表达式输入:
value.split("; ").length - 点击「行」→「统计」→「求和」,即可得到所有符合条件的变体词的总出现次数
如果已知特定的变体模式(比如固定位置的字母重复或替换),也可以直接用正则表达式匹配,比如匹配woord/worrd这类变体的正则:/\bwo?r?d\b/(需结合大小写标准化),但编辑距离的方法更灵活,能覆盖所有单个字母差异的情况。
内容的提问来源于stack exchange,提问作者Jaakko Santavuori
相关产品推荐
相关产品推荐

