Как найти частоты слов каждого слова из большого корпуса? - PullRequest
0 голосов
/ 13 февраля 2019

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

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

Корпус:

jag har ett stort hus också jag har ett stortfält jag.

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

jag 3

har 2

ett 2

stort 2

hus 1

fält 1

Решение:

чаще всего:

jag 3

har 2

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

hus 1

fält 1

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

1 Ответ

0 голосов
/ 13 февраля 2019

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

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

...