Python 合并文本中的重复字符串
我有一个这种格式的词频表:Python 合并文本中的重复字符串,python,bash,Python,Bash,我有一个这种格式的词频表: 3 yaz 1 yazlik 5 zemin 3 zemine 1 zeminde 2 zeminler zemine和zeminde是不同的字符串,但具有相同的根zemine 我想像这样合并列表: 4 yaz 11 zemin 如何使用bash或python实现这一点?使用bash(4.0+)的解决方案,即使使用未排序的列表也能工作: $ cat script.sh #!/bin/bash declare -A roots # declare roots as
3 yaz
1 yazlik
5 zemin
3 zemine
1 zeminde
2 zeminler
zemine
和zeminde
是不同的字符串,但具有相同的根zemine
我想像这样合并列表:
4 yaz
11 zemin
如何使用bash或python实现这一点?使用
bash
(4.0+)的解决方案,即使使用未排序的列表也能工作:
$ cat script.sh
#!/bin/bash
declare -A roots # declare roots as an associative array (bash 4.0+)
while read n word; do
unset shortest longest
# check if the element (or its root) is already registered
for root in "${!roots[@]}"; do
if [[ "$root" =~ ^$word ]]; then
shortest=$word
longest=$root
elif [[ "$word" =~ ^$root ]]; then
shortest=$root
longest=$word
fi
done
# if registered, check if it must be replaced for a shorter one (its root)
if [ "$longest" ] && [ "${roots[$longest]}" ]; then
tmp_n=${roots["$longest"]}
unset roots["$longest"]
roots["$shortest"]=$tmp_n
fi
# register or update the element
let roots[${shortest:-$word}]+=$n
done < list
# print the result
for root in "${!roots[@]}"; do
echo "${roots[$root]} $root"
done
什么决定了一个词的“词根”?
会不会加重
和苹果
有相同的根a
?@ZevChonoles问得好。实际上,这个过程比我想象的要困难得多,你必须定义一个单词的词根。解决方法是检查:如果“zemin”在“zemindler”中:打印“true”,但当abzeminad也在列表中时,这将遇到问题。虽然root不是zemin,但我的代码仍然会为if语句生成true。查找“词干生成”(例如,参见nlp
Python包中的波特算法实现)类似于:第二个字段上的排序。读取num word时循环文件;执行
。记住最后一个单词并检查最后一个单词是否是新词的子字符串,是:添加num,否回显旧和和和旧根,并存储新根结束新和等于新num。
$ cat list
3 yaz
1 yazlik
1 zeminde
5 zemin
3 zemine
2 zeminler
$ ./script.sh
4 yaz
11 zemin