Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 13, 2020 14:36:52

jeyzihno
Зарегистрирован: 2020-05-04
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Программа по выделению слов

Добрый день, появилась необходимость написать программу для выделения слов.
Скажем, что у меня есть строка допустим такая ‘55anywayвлюбомслучае56introduceпредставлять’ в которой есть английские, русские слова и буквы.
Мне необходимо выделить оттуда английские и русские слова чтобы в итоге получить отдельно. Например ‘anyway - в любом случае’.
Подскажите что использовать? Какие методы или функции?

Офлайн

#2 Сен. 13, 2020 16:30:03

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Программа по выделению слов

тыц



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Офлайн

#3 Сен. 13, 2020 21:06:57

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Программа по выделению слов

Можешь регулярные выражения использовать.

Офлайн

#4 Сен. 13, 2020 22:25:56

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Программа по выделению слов

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) содержит слитное словосочетание “влюбомслучае”, так вот его не так просто разделить. Но так как у нас эта часть выделена в свой кусочек, мы можем её дальше направить на какой-то целый айсберг кода, который проведёт полный языковой анализ (семантику, морфологию и так далее) и вернёт это словосочетание разделённым. При этом остальные части наших данных никакого айсберга не требуют и уже готовы. Всё это происходит правильно и точно только потому, что всё разделено на кусочки. Каждый кусочек обрабатывается своим набором кода, который никакого отношения к другим кусочкам данных не имеет.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version