Python: как ускорить этот метод утомления? Три?

У меня есть корпус со строками предложений без пробелов между словами:

thenextdayonmayanarchistsstagedarallyatchicagoshaymarketsquare
abombwasthrownbyanunknownpartyneartheconclusionoftherallykillinganofficer
intheensuingpanicpoliceopenedfireonthecrowdandeachother
sevenpoliceofficersandatleastfourworkerswerekilled

Мне нужно разделить каждое предложение лексикой в ​​словаре, например: {'the': 1, 'next':2, 'thenext':3'...} Цифры - это просто частоты, которые здесь не важны.

На выходе будут варианты (списки) сегментов, например: [[the, next, day...], [thenext, day...]...]

А вот мой код (filter_worddict - словарь)

def segment(sentence):
    if sentence == '':
        yield []
    for w in filter_worddict:
        if sentence.startswith(w):
            for rest in segment(sentence[len(w):]):
                yield [w] + rest

with open('sentences.txt', 'r') as f4, open('result.txt', 'w') as f5:
    for line4 in f4:
        line4 = line4.strip()
        corpus = list(segment(line4))
        for corpusline in corpus:
            f5.write(str(corpusline) + '\n')

Как можно ускорить этот код? В последний раз, когда я пытался использовать корпус (менее 30 МБ), размер словаря был 5 МБ, и это заняло 48 часов. . .

Я огляделся, и у меня есть выбор между Трие и Питри, что кажется многообещающим решением. Но я не знаю, как это правильно сделать в этом случае. Заранее спасибо!

вы пробовали использовать потоки?

Danila Ganchar 20.05.2018 15:12
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
69
0

Другие вопросы по теме