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