1

不久前,一位深思熟虑且聪明的人通过 bash 脚本帮助了我,但我最近意识到我没有足够清楚地解释我想要什么。我在纯文本文件中有一长串短语(ngram)。如果一个词组是另一个词组的片段,那么只有较长的词组有用,所以较短的词组需要删除。下面的代码删除了较长的代码。我希望切换这将是改变几个字符的问题。

#! /bin/bash
((n=${1:-0})) || exit 1

declare -A ngrams

while read -ra line; do
    for ((i = 0; i < ${#line[@]}; i++)); do
            ((ngrams[${line[@]:i:n}]++))
    done
done 

for i in "${!ngrams[@]}"; do
    printf '%d\t%s\n' "${ngrams[$i]}" "$i"
done
4

1 回答 1

1

不是通过改变几个字符,而是新写的:

#! /bin/bash

declare -a ngrams
mapfile -t ngrams < $1
for ((i=0; i<${#ngrams[@]}; i++)); do
    for ((j=0; j<${#ngrams[@]}; j++)); do
        if  ((  i!=j )) && [[  "${ngrams[j]}" == *"${ngrams[i]}"* ]]; then
            continue 2
        fi
    done
    echo ${ngrams[i]} >> $2
done

您可以调用它ngram.sh <infile> <outfile>。例如:

> cat txt.in
foo
me me me
kaaz
bar
foo bar
blub
me
> ./ngram.sh txt.in txt.out
> cat txt.out
me me me
kaaz
foo bar
blub
于 2013-07-24T16:03:40.453 回答