Как найти частоты слов каждого слова из большого корпуса?

Я задавал этот вопрос около месяца назад. Однако никто не дал ответа или даже комментария. Я повторяю вопрос, чтобы кто-то помог на этот раз.

У меня большой Unicode Одноязычный корпус состоит из более 100 миллионов слов в текстовом файле размером 1,7 ГБ. Теперь мне нужно найти частоту слов каждого слова в этом корпусе, чтобы я мог найти 20 самых частых слов и 20 наименее частых слов в корпусе. Например, (пример приведен на шведском, а не на бенгальском языке для простоты понимания)

Корпус:

Джаг Хар Этт Сторт Фулт Джаг.

Частота слова:

зазубрин 3

хар 2

этт 2

сторт 2

гуси 1

Фельт 1

Desicion:

чаще всего:

зазубрин 3

хар 2

Наименее частые:

гуси 1

Фельт 1

НО, когда я пытался использовать базу данных mysql для хранения новых слов из корпуса и увеличения его частоты каждый раз на единицу. так что, наконец, я могу получить слова с их частотой. однако, потребовалось 2 дня, чтобы завершить даже 10% корпуса. Я пробовал другой способ, сохраняя текстовый файл, чтобы вести учет частоты каждого слова. Однако, это терпит неудачу из-за того, что система не работает для слов Unicode. Пожалуйста, предложите мне простой и быстрый способ рассчитывать на это (может быть на PHP или PYTHON).

-3

Решение

В 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 миллионов слов будут очень и очень большой задачей, и я ожидал бы столкнуться с проблемами памяти и времени. Я ожидаю, что вам повезет работать с частичными порциями ваших данных за раз.

Вы также можете посмотреть на многопроцессорность

0

Другие решения

Других решений пока нет …