У меня есть два файла: wordlist.txt и text.txt.
Первый файл wordlist.txt содержит огромный список слов на китайском, японском и корейском языках, например:
你
你们
我
Второй файл text.txt содержит длинные проходы, например:
你们要去哪里?
卡拉OK好不好?
Я хочу создать новый список слов (wordsfount.txt), но он должен содержать только те строки из wordlist.txt, которые встречаются хотя бы один раз внутри text.txt. Выходной файл из приведенного выше должен показать это:
你
你们
"我" не найден в этом списке, потому что он никогда не найден в text.txt.
Я хочу найти очень быстрый способ создания этого списка, который содержит только строки из первого файла, которые находятся во второй.
Я знаю простой способ в BASH проверить каждую строку в worlist.txt и посмотреть, находится ли она в text.txt, используя grep:
a=1
while read line
do
c=`grep -c $line text.txt`
if [ "$c" -ge 1 ]
then
echo $line >> wordsfound.txt
echo "Found" $a
fi
echo "Not found" $a
a=`expr $a + 1`
done < wordlist.txt
К сожалению, поскольку wordlist.txt - очень длинный список, этот процесс занимает много часов. Должно быть более быстрое решение. Вот одно соображение:
Поскольку файлы содержат буквы CJK, их можно рассматривать как гигантский алфавит, содержащий около 8000 букв. Поэтому почти каждое слово делится персонажами. Например:.
我
我们
В связи с этим, если "我" никогда не встречается внутри text.txt, то вполне логично, что "我们" никогда не появляется. Более быстрая script, возможно, сначала проверит "我" , и, обнаружив, что ее нет, не будет проверять каждое последующее слово, содержащееся с wordlist.txt, которое также содержится в wordlist.txt. Если в wordlist.txt содержится около 8000 уникальных символов, тогда script не нужно проверять столько строк.
Каков самый быстрый способ создать список, содержащий только те слова, которые находятся в первом файле, которые также находятся где-то внутри второго?