Я задавал этот вопрос около месяца назад. Однако никто не дал ответа или даже комментария. Я повторяю вопрос, чтобы кто-то помог на этот раз.
У меня большой Unicode Одноязычный корпус состоит из более 100 миллионов слов в текстовом файле размером 1,7 ГБ. Теперь мне нужно найти частоту слов каждого слова в этом корпусе, чтобы я мог найти 20 самых частых слов и 20 наименее частых слов в корпусе. Например, (пример приведен на шведском, а не на бенгальском языке для простоты понимания)
Корпус:
Джаг Хар Этт Сторт Фулт Джаг.
Частота слова:
зазубрин 3
хар 2
этт 2
сторт 2
гуси 1
Фельт 1
Desicion:
чаще всего:
зазубрин 3
хар 2
Наименее частые:
гуси 1
Фельт 1
НО, когда я пытался использовать базу данных mysql для хранения новых слов из корпуса и увеличения его частоты каждый раз на единицу. так что, наконец, я могу получить слова с их частотой. однако, потребовалось 2 дня, чтобы завершить даже 10% корпуса. Я пробовал другой способ, сохраняя текстовый файл, чтобы вести учет частоты каждого слова. Однако, это терпит неудачу из-за того, что система не работает для слов Unicode. Пожалуйста, предложите мне простой и быстрый способ рассчитывать на это (может быть на PHP или PYTHON).
В Python самый простой способ — использовать collections.Counter создать встречный объект. Я рассчитал время, используя (очень ограниченный) корпус из 200 000 слов
from collections import Counter
x='jag har ett stort hus också jag har ett stort fält jag cat rat bat cat bar baz cat jag '
x=x*10000
%timeit c=Counter(x.split())
49.4 ms ± 7.51 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
c.most_common(5)
[('jag', 40000),
('cat', 30000),
('har', 20000),
('ett', 20000),
('stort', 20000)]
При этом> 100 миллионов слов будут очень и очень большой задачей, и я ожидал бы столкнуться с проблемами памяти и времени. Я ожидаю, что вам повезет работать с частичными порциями ваших данных за раз.
Вы также можете посмотреть на многопроцессорность
Других решений пока нет …