У меня есть два файла, wordlist.txt
и text.txt
.
Первый файл, wordlist.txt
, содержит огромный список слов на китайском, японском и корейском языках, например:
你
你们
我
Второй файл, text.txt
, содержит длинные отрывки, например:
你们要去哪里?
卡拉OK好不好?
Я хочу создать новый список слов ( wordsfount.txt
), но он должен содержать только те строки из списка слов.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
, то вполне логично, что и "我们" никогда не появляется. Более быстрый сценарий, возможно, мог бы сначала проверить "我", и, обнаружив, что его нет, не стал бы проверять каждое последующее слово, содержащееся в wordlist.txt
, которое также содержится в wordlist.txt
. . Если в wordlist.txt
найдено около 8000 уникальных символов, то скрипту не нужно проверять столько строк.
Как быстрее всего создать список, содержащий только те слова, которые находятся в первом файле, но также находятся где-то во втором?