У меня есть корпус со строками предложений без пробелов между словами:
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 часов. . .
Я огляделся, и у меня есть выбор между Трие и Питри, что кажется многообещающим решением. Но я не знаю, как это правильно сделать в этом случае. Заранее спасибо!






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