如何将第一句、第二句、第一句与第三句等进行比较,并使用shell script
or bash
我有一个包含重复单词的句子,例如文件中的输入数据my_text.txt
并且应该忽略每个句子中的重复单词、填充词和非字母字符。
外壳脚本
Linux shell 脚本
shell 或 bash 很有趣
我使用这个 shell 脚本来查找相似性
words=$(
< my_text.txt tr 'A-Z' 'a-z' |
grep -Eon '\b[a-z]*\b' |
grep -Fwvf <(printf %s\\n is a to be by the and for) |
sort -u | cut -d: -f2 | sort
)
union=$(uniq <<< "$words" | wc -l)
intersection=$(uniq -d <<< "$words" | wc -l)
echo "similarity is $(bc -l <<< "$intersection/$union")"
上面的脚本一次计算所有句子的相似度,但我想找到所有相似度对(例如 1:2、1:3、1:4、...、2:3、2:4、...、3:4 , ...)
我想找到像这2个例子一样的相似性:
- 对于第一句和第二句:
- 两个句子的交集:
Shell + Script
- 两个句子的并集“size”:
3
-
相似度 :
0.66666666
--
-
对于第一句和第三句 :
- 两个句子的交集:
Shell
- 两个句子的并集“size”:
4
-
相似度 :
0.25
有人可以帮忙吗?
对我的答案稍作调整你之前的问题,仍然使用 GNU awk 进行 FPAT 和数组的数组:
$ cat tst.awk
BEGIN {
split("is a to be by the and for",tmp)
for (i in tmp) {
stopwords[tmp[i]]
}
FPAT="[[:alnum:]_]+"
}
{
for (i=1; i<=NF; i++) {
word = tolower($i)
if ( !(word in stopwords) ) {
words[NR>1?2:1][word]
}
}
}
NR > 1 {
numCommon = 0
for (word in words[1]) {
if (word in words[2]) {
numCommon++
}
}
totWords = length(words[1]) + length(words[2]) - numCommon
print (totWords ? numCommon / totWords : 0)
delete words[2]
}
$ awk -f tst.awk file
0.666667
0.166667
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)