Une personne réfléchie et intelligente m'a aidé avec un script bash, mais j'ai récemment réalisé que je n'expliquais pas clairement ce que je voulais. J'ai une longue liste de phrases (ngrams) dans un fichier texte. Si une phrase est un fragment d'une autre, seule la plus longue est utile, de sorte que la plus courte doit être supprimée. Le code ci-dessous supprime le plus long. J'espère que changer cela va changer quelques caractères.ngrams (modifier le script bash existant)
#! /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
Alors peut-être qu'il n'était pas si "pensif" après tout (étant donné qu'il ne l'a pas expliqué clairement afin de permettre * vous * ** comprendre **). – devnull
@ user1889034 - Pouvez-vous donner un exemple des données d'entrée? Est-ce que l'un des fragments indésirables peut apparaître au milieu des fragments plus longs désirés? –