Вдумчивый и умный человек немного помог мне с помощью сценария bash, но недавно я понял, что не объяснил, что я хочу достаточно ясно. У меня есть длинный список фраз (ngrams) в текстовом файле. Если одна фраза является фрагментом другой, только более длинная из них используется, поэтому более короткая она должна быть удалена. Код ниже удаляет более длинный. Надеюсь, что переход будет состоять в изменении нескольких персонажей.ngrams (tweak to existing bash script)
#! /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
В конце концов, возможно, он не был таким «задумчивым» (учитывая, что он не объяснил это четко, чтобы позволить вам * ** понимать **). – devnull
@ user1889034 - Можете ли вы привести пример входных данных? Может ли какой-либо из нежелательных фрагментов появляться посреди более желаемых более длинных фрагментов? –