我正在尝试比较两个文本文件文档(40 多页),它们似乎散布着相似的句子。我想以某种方式检测这些相似之处。我脑海中冒出的第一个想法是查找两个文件中存在的任何三个连续的单词(不区分大小写)。遗憾的是,我不是 Linux 高手。是否有一些脚本可以帮我识别这些?
答案1
如何从每个句子中提取三个连续的单词:
假设两个文件分别名为file1.txt
和file2.txt
。使用 将每个行尾转换为空格tr
,然后使用 提取每个行中包含三个连续单词的行sgrep(您可能需要安装它,许多发行版都将其作为一个包提供):
cat file1.txt | tr '[\n]' ' ' | sgrep -o '%r\n' '" "_." ".." "._" "' > file1.words
cat file2.txt | tr '[\n]' ' ' | sgrep -o '%r\n' '" "_." ".." "._" "' > file2.words
确保在 或 中的第一个单词之前和最后一个单词之后插入空格或换行符file1.txt
,file2.txt
否则它对第一个或最后三个单词不起作用。这样可以保留标点符号并使其成为单词的一部分,您可以通过插入额外的
... | tr -d '[,.;:()]' | ...
在第一个之后tr
(|
角色在命令之间建立“管道”,因此下一个命令使用前一个命令的输出)。
接下来,找出这三个单词的重复:
sort file1.words file2.words | uniq -d
这将打印出多次出现的任何三个单词的集合,无论是在同一个文件中,还是在file1.txt
和中file2.txt
。您需要手动检查每个出现的情况(使用文本编辑器中的搜索)以找出哪些,但无论如何您都希望这样做以判断相似性。
这仍然是一个非常粗略的相似性匹配近似值,但我不知道有任何方便的命令行工具可以提供类似编辑距离对线对进行测量。