поиск похожих фраз в тексте файла. txt

Для поиска фраз, похожих по смыслу в файле .txt, можно воспользоваться следующими подходами:


1. Простой поиск совпадений с помощью регулярных выражений
Если фразы структурированы и содержат общие ключевые слова, можно использовать регулярные выражения для поиска.
Пример на Python:
import re

pattern = re.compile(r'ваша_фраза|другая_фраза', re.IGNORECASE)

with open('your_file.txt', 'r', encoding='utf-8') as file:
    for line in file:
        if pattern.search(line):
            print(line.strip())


2. Поиск с использованием библиотеки NLP (например, SpaCy или NLTK)
Сначала нужно обработать текстовый файл, токенизировать его и вычислить схожесть предложений с помощью векторов слов.
Пример на Python с использованием SpaCy:
import spacy

nlp = spacy.load('en_core_web_md')  # Загрузите модель среднего размера

target_sentence = nlp("ваша фраза")

with open('your_file.txt', 'r', encoding='utf-8') as file:
    for line in file:
        doc = nlp(line.strip())
        similarity = target_sentence.similarity(doc)
        if similarity > 0.8:  # Укажите пороговое значение для схожести
            print(f"{similarity:.2f}: {line.strip()}")


3. Использование более продвинутых моделей, таких как BERT
Для более сложных задач можно использовать модели глубокого обучения, такие как BERT, для вычисления схожести предложений.
Сначала текст нужно будет превратить в эмбеддинги, а затем вычислить косинусное расстояние между ними.
Выбор подхода зависит от сложности задачи и доступных ресурсов. Если текст простой и схожие фразы легко выделить, можно ограничиться первым методом. Если текст сложный, лучше использовать методы на основе машинного




- а можно также разбить фразы на корни и слоги слов и на основе этой статистики найти фразы которые созвучны той что мы ввели через input


Да, можно разбить фразы на корни и слоги, а затем найти созвучные фразы на основе этой информации. Для этого можно использовать морфологический разбор и разбиение слов на слоги. Далее, вы можете сопоставить введённую фразу с другими фразами по схожести корней и слогов.

Вот пример, как это можно сделать на Python с использованием библиотеки pymorphy2 для морфологического разбора и обычного разбиения слов на слоги:

1. Установка необходимых библиотек
pip install pymorphy2

2. Пример кода:
import pymorphy2

# Инициализация морфологического анализатора
morph = pymorphy2.MorphAnalyzer()

def split_word_into_syllables(word):
    vowels = "аеёиоуыэюя"
    syllables = []
    syllable = ''
   
    for letter in word:
        syllable += letter
        if letter in vowels:
            syllables.append(syllable)
            syllable = ''
   
    if syllable:
        syllables.append(syllable)
   
    return syllables

def extract_roots_and_syllables(text):
    roots_syllables = []
    words = text.split()
   
    for word in words:
        # Разбор слова
        parsed_word = morph.parse(word)[0]
        # Извлечение корня
        root = parsed_word.lexeme[0].normal_form
        # Разделение слова на слоги
        syllables = split_word_into_syllables(root)
        roots_syllables.append((root, syllables))
   
    return roots_syllables

# Ввод фразы
input_phrase = input("Введите фразу: ")

# Пример разбора фразы
input_roots_syllables = extract_roots_and_syllables(input_phrase)
print("Корни и слоги введённой фразы:", input_roots_syllables)

# Чтение файла и нахождение похожих фраз
with open('your_file.txt', 'r', encoding='utf-8') as file:
    for line in file:
        line_roots_syllables = extract_roots_and_syllables(line)
       
        # Здесь можно добавить логику сравнения по корням и слогам
        # Например, подсчет общего количества совпадений корней и слогов
        common_roots = set(root for root, _ in input_roots_syllables) & set(root for root, _ in line_roots_syllables)
        common_syllables = set(syl for _, syllables in input_roots_syllables for syl in syllables) & set(syl for _, syllables in line_roots_syllables for syl in syllables)
       
        if common_roots or common_syllables:
            print(f"Похожие фразы: {line.strip()}")
            print(f"Общие корни: {common_roots}, Общие слоги: {common_syllables}\n")


  =-->

 Как это работает:
Разбиение на корни: Используется pymorphy2, чтобы разобрать слова и извлечь их нормализованные формы, которые можно рассматривать как корни.
Разбиение на слоги: Простая функция, которая делит слово на слоги на основе гласных.

Сравнение: Фразы сравниваются на основе совпадения корней и слогов.
Этот код выводит фразы из файла, которые имеют общие корни или слоги с введенной






- а есть же готовый алгоритм который вычисляет насколько похожи фразы в процентах

Да, существуют готовые алгоритмы, которые вычисляют схожесть фраз в процентах. Некоторые из наиболее популярных методов для вычисления схожести текстов включают:

1. Метод косинусного расстояния
Использует векторизацию текста (например, с помощью TF-IDF) и вычисляет косинусное расстояние между векторами.
Чем меньше косинусное расстояние, тем больше схожесть (100% - если угол между векторами равен нулю).

2. Метод Жаккара
Сравнивает множества токенов двух текстов и вычисляет коэффициент Жаккара, который равен отношению количества общих токенов к количеству уникальных токенов в обоих текстах.

3. Метод Левенштейна (расстояние Левенштейна)
Вычисляет количество операций (вставка, удаление, замена), необходимых для преобразования одной строки в другую.
Результат можно преобразовать в процент схожести.

4. Использование предобученных моделей, таких как BERT
Модели, такие как BERT, можно использовать для вычисления эмбеддингов предложений и сравнения их с помощью косинусного сходства.
Пример вычисления схожести на Python с использованием библиотеки fuzzywuzzy (использует алгоритм Левенштейна):


1. Установка библиотеки
pip install fuzzywuzzy[speedup]

2. Пример использования:
from fuzzywuzzy import fuzz
from fuzzywuzzy import process

# Две фразы для сравнения
phrase1 = "Привет, как дела?"
phrase2 = "Здравствуй, как у тебя дела?"

# Вычисление схожести в процентах
similarity = fuzz.ratio(phrase1, phrase2)
print(f"Схожесть: {similarity}%")

# Если нужно найти наиболее похожую фразу из списка
choices = ["Привет, как дела?", "Здравствуй, как у тебя дела?", "Как поживаешь?", "Добрый день!"]
best_match = process.extractOne(phrase1, choices)
print(f"Наиболее похожая фраза: {best_match[0]} с схожестью {best_match[1]}%")


3. Интерпретация результата:
fuzz.ratio: Вычисляет процент схожести двух строк (100% означает полное совпадение).
process.extractOne: Ищет наиболее похожую строку из списка и возвращает её вместе с процентом схожести.


 Пример работы:
Если phrase1 = "Привет, как дела?" и phrase2 = "Здравствуй, как у тебя дела?", результат будет Схожесть: 68%.
Альтернативы:
difflib.SequenceMatcher — стандартная библиотека Python, которая также может использоваться для сравнения строк и вычисления коэффициента схожести.
Каждый из этих методов подходит для различных задач в зависимости от требуемой точности и размера данных.




- давай введём фразу input и методом Жаккара найдём в файле фразы.txt 12 похожих фраз так чтобы в них было столько же слов как и в исходной фразе 

->>

Для реализации поиска схожих фраз по методу Жаккара в файле фразы.txt, давай создадим скрипт на Python, который:

Сравнит каждую строку в файле с введенной фразой.
Выберет 12 наиболее похожих фраз, учитывая количество слов.
Выведет результаты.


Пример кода:
from collections import Counter

# Функция для вычисления коэффициента Жаккара
def jaccard_similarity(set1, set2):
    intersection = len(set1 & set2)
    union = len(set1 | set2)
    return intersection / union if union != 0 else 0

# Ввод фразы
input_phrase = input("Введите фразу: ").strip().lower()
input_words = set(input_phrase.split())

# Список для хранения результатов
results = []

# Чтение файла и поиск похожих фраз
with open('фразы.txt', 'r', encoding='utf-8') as file:
    for line in file:
        line = line.strip().lower()
        line_words = set(line.split())

        # Проверка на совпадение количества слов
        if len(line_words) == len(input_words):
            similarity = jaccard_similarity(input_words, line_words)
            results.append((similarity, line))

# Сортировка результатов по коэффициенту Жаккара в порядке убывания
results.sort(reverse=True, key=lambda x: x[0])

# Вывод 12 наиболее похожих фраз
top_12_phrases = results[:12]
for similarity, phrase in top_12_phrases:
    print(f"Фраза: {phrase} | Схожесть: {similarity * 100:.2f}%")

Как это работает:

Ввод фразы: Вы вводите фразу, которую хотите сравнить.
Обработка файла: Программа читает каждую строку из файла фразы.txt.
Сравнение по Жаккару: Для каждой строки вычисляется коэффициент Жаккара по множествам слов.
Проверка длины: Программа учитывает только те строки, которые имеют такое же количество слов, как и введенная фраза.
Сортировка и вывод: На основе коэффициента Жаккара выводятся 12 наиболее похожих фраз.
Запуск скрипта:
Убедитесь, что файл фразы.txt находится в той же директории, что и скрипт, и содержит строки, которые нужно сравнить.

Когда вы запустите этот скрипт, он выведет 12 наиболее похожих фраз на основе введенной вами фразы, с учетом количества слов и коэффициента Жаккара.


Рецензии