jeyzihno
Скажем, что у меня есть строка допустим такая ‘55anywayвлюбомслучае56introduceпредставлять’ в которой есть английские, русские слова и буквы.
Мне необходимо выделить оттуда английские и русские слова чтобы в итоге получить отдельно. Например ‘anyway - в любом случае’.
Общий подход такой:
>>> import re
>>> import string
>>>
>>> def get_tokens(text):
... pat = r'[a-z]+[а-яё]+'
... out = re.findall(pat, text)
... return out
...
>>> def split_token(text):
... eng, rus = [], []
... for ch in text:
... if ch in string.ascii_lowercase:
... eng.append(ch)
... else:
... rus.append(ch)
... out = (''.join(eng), ''.join(rus))
... return out
...
>>> text = '55anywayвлюбомслучае56introduceпредставлять'
>>>
>>> tokens = get_tokens(text)
>>> tokens
['anywayвлюбомслучае', 'introduceпредставлять']
>>>
>>> splitted = tuple(map(split_token, tokens))
>>> splitted
(('anyway', 'влюбомслучае'), ('introduce', 'представлять'))
>>>
То есть ты как бы постепенно данные упрощаешь и упрощаешь, очищаешь и очищаешь. В итоге у тебя получается то, что тебе надо.
В одной функции всё не делай. Это как торт есть. Можно пытаться его весь такой вкусный в рот затолкать, а можно от него по кусочку отрезать и спокойно съесть его весь и вообще не перепачкаться.
Тоже обрати внимание, что каждое действие может делаться разными способами и ты эти способы можешь подбирать, но делать это можно только тогда, когда всё это разделено по кусочкам. Тогда каждый кусочек ты и можешь переделать на какой-то другой лад, который тебе удобен или который сам по себе лучше работает.
В частности первая лексема (лексема = token) содержит слитное словосочетание “влюбомслучае”, так вот его не так просто разделить. Но так как у нас эта часть выделена в свой кусочек, мы можем её дальше направить на какой-то целый айсберг кода, который проведёт полный языковой анализ (семантику, морфологию и так далее) и вернёт это словосочетание разделённым. При этом остальные части наших данных никакого айсберга не требуют и уже готовы. Всё это происходит правильно и точно только потому, что всё разделено на кусочки. Каждый кусочек обрабатывается своим набором кода, который никакого отношения к другим кусочкам данных не имеет.