Ответ
Для выделения паттернов из текста в Python существует ряд мощных инструментов, каждый из которых подходит для разных типов задач:
-
Регулярные выражения (модуль
re) – это основной и наиболее гибкий инструмент для поиска и извлечения текстовых шаблонов. Идеально подходят для структурированных паттернов, таких как email-адреса, номера телефонов, даты или специфические форматы строк.import re text = "Contact us at info@example.com or call +1-555-123-4567. Visit our site example.org." # Извлечение email-адресов emails = re.findall(r'b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Z|a-z]{2,}b', text) print(f"Emails: {emails}") # ['info@example.com', 'example.org'] # Извлечение номеров телефонов phones = re.findall(r'+d{1,3}-d{3}-d{3}-d{4}', text) print(f"Phones: {phones}") # ['+1-555-123-4567'] -
NLTK (Natural Language Toolkit) – библиотека для работы с естественным языком, предоставляющая инструменты для токенизации, стемминга, лемматизации, POS-теггинга и извлечения n-грамм. Полезна для лингвистических паттернов и базового NLP.
from nltk.tokenize import word_tokenize from nltk.util import ngrams text = "Python is a powerful and versatile programming language." tokens = word_tokenize(text) # Извлечение биграмм (паттернов из двух слов) bigrams = list(ngrams(tokens, 2)) print(f"Bigrams: {bigrams}") # [('Python', 'is'), ('is', 'a'), ...] -
spaCy – высокопроизводительная библиотека для промышленного NLP. Она позволяет выделять именованные сущности (NER), части речи, синтаксические зависимости и другие сложные лингвистические паттерны. Отлично подходит для анализа больших объемов текста.
import spacy nlp = spacy.load("en_core_web_sm") # Загрузка малой англоязычной модели doc = nlp("Apple is looking at buying U.K. startup for $1 billion.") # Извлечение именованных сущностей entities = [(ent.text, ent.label_) for ent in doc.ents] print(f"Entities: {entities}") # [('Apple', 'ORG'), ('U.K.', 'GPE'), ('$1 billion', 'MONEY')] -
difflib.SequenceMatcher– модуль стандартной библиотеки Python, используемый для сравнения последовательностей (например, строк) и нахождения общих подпоследовательностей. Полезен для выявления паттернов схожести между текстами.from difflib import SequenceMatcher s1 = "apple pie" s2 = "apple juice" # Расчет коэффициента схожести (от 0 до 1) ratio = SequenceMatcher(None, s1, s2).ratio() print(f"Similarity ratio: {ratio:.3f}") # 0.769
Для более сложных задач, таких как извлечение скрытых семантических паттернов или классификация текста, эти инструменты часто комбинируются с методами машинного обучения (например, с библиотеками scikit-learn, TensorFlow, PyTorch) или специализированными библиотеками для веб-скрейпинга и анализа данных.
Ответ 18+ 🔞
Слушай, а вот есть у нас в Питоне, блядь, целый зоопарк инструментов, чтобы из текста паттерны выковыривать. Каждый для своего дела, как молоток и микроскоп, понимаешь? Вот смотри, разжую.
Регулярки (модуль re) — это, сука, наш швейцарский нож, палочка-выручалочка. Хочешь почты вытащить, хочешь телефоны, хочешь даты — они всё съедят. Просто пишешь шаблон, который выглядит как ебушки-воробушки, и он тебе всё находит.
import re
text = "Пиши на spam@example.com или звони +7-999-123-45-67. Сайт — example.ru."
# Выковыриваем email'ы
emails = re.findall(r'b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Z|a-z]{2,}b', text)
print(f"Почты: {emails}") # ['spam@example.com', 'example.ru']
# Ловим номера телефонов
phones = re.findall(r'+d{1,3}-d{3}-d{3}-d{2}-d{2}', text)
print(f"Телефоны: {phones}") # ['+7-999-123-45-67']
Видишь? Мощно, ёпта. Но шаблоны эти писать — это отдельная магия, иногда мозг сломать можно.
NLTK — это уже для языка, для словесной возни. Разбить текст на слова, найти корни, вытащить сочетания слов (n-граммы). Для лингвистических узоров самое то.
from nltk.tokenize import word_tokenize
from nltk.util import ngrams
text = "Питон — это мощный и гибкий язык программирования."
tokens = word_tokenize(text)
# Достаём биграммы (пары слов подряд)
bigrams = list(ngrams(tokens, 2))
print(f"Пары слов: {bigrams}") # [('Питон', '—'), ('—', 'это'), ...]
Работает, но иногда тормозит, как черепаха в сиропе, если текст овердохуища.
spaCy — это, блядь, тяжёлая артиллерия. Промышленный инструмент. Загрузил модель — и она тебе сразу сущности находит: имена, компании, деньги, даты. Всё разложит по полочкам.
import spacy
nlp = spacy.load("ru_core_news_sm") # Грузим русскую модель, ёпта
doc = nlp("Яблоко хочет купить британский стартап за $1 миллиард.")
# Именованные сущности — кто, что, сколько
entities = [(ent.text, ent.label_) for ent in doc.ents]
print(f"Сущности: {entities}") # [('Яблоко', 'ORG'), ('британский', 'LOC'), ('$1 миллиард', 'MONEY')]
Штука быстрая и умная, но модельку качать надо, это минус.
difflib.SequenceMatcher — а это из коробки Питона, скромный такой труженик. Нужно понять, насколько две строки похожи? Вот он тебе коэффициент подскажет.
from difflib import SequenceMatcher
s1 = "яблочный пирог"
s2 = "яблочный сок"
# Считаем схожесть (от 0 до 1)
ratio = SequenceMatcher(None, s1, s2).ratio()
print(f"Коэффициент схожести: {ratio:.3f}") # 0.769
Просто и сердито, в рот меня чих-пых.
А если тебе надо что-то посерьёзнее — скрытые смыслы искать или текст классифицировать — то тут уже подключают машинное обучение (scikit-learn, TensorFlow). Но это, друг, уже совсем другая история, там без бутылки и учебника не разберёшься.