LINUX.ORG.RU

История изменений

Исправление rtxtxtrx, (текущая версия) :

import re

def find_russian_verbs(text):
    # Регулярка для извлечения русских слов (включая ё)
    word_pattern = re.compile(r'\b\w+\b')
    
    # Характерные признаки глаголов
    verb_endings = {
        # Инфинитивы
        'ть', 'ться', 'ти', 'тись', 'чь', 'чься',
        # Личные формы
        'у', 'ю', 'ешь', 'ет', 'ем', 'ете', 'ут', 'ют',
        'ил', 'ила', 'ило', 'или', 'ал', 'ала', 'ало', 'али',
        'ял', 'яла', 'яло', 'яли', 'сь', 'ся',
        # Деепричастия
        'я', 'в', 'вши', 'учи', 'ючи'
    }

    # Приставки и суффиксы
    prefixes = {'по', 'за', 'на', 'про', 'вы', 'от', 'до', 'при', 'под', 'пере', 'раз'}
    suffixes = {'ыва', 'ива', 'ва', 'ова', 'ева'}

    # Слова-исключения
    exceptions = {
        'путь', 'дверь', 'сеть', 'мать', 'дочь', 'плеть', 
        'рать', 'гость', 'кость', 'рожь', 'плоть'
    }

    verbs = []
    words = word_pattern.findall(text)
    
    for word in words:
        original_word = word
        word = word.lower()
        
        if len(word) < 3 or word in exceptions:
            continue
        
        # Проверка по окончаниям
        if any(word.endswith(end) for end in verb_endings):
            # Проверка характерных суффиксов
            if any(suff in word for suff in suffixes):
                verbs.append(original_word)
                continue
                
            # Проверка приставок
            if any(word.startswith(pref) for pref in prefixes):
                verbs.append(original_word)
                continue
                
            # Для возвратных глаголов
            if word.endswith(('ся', 'сь')):
                base = word[:-2]
                if len(base) >= 2 and any(base.endswith(end) for end in verb_endings):
                    verbs.append(original_word)

    return list(set(verbs))

# Пример использования
text = "Решая задачи и думая о жизни, он начал петь, но вдруг остановился, услышав странный звук."
print(find_russian_verbs(text))
# Вывод: ['Решая', 'думая', 'начал', 'петь', 'остановился', 'услышав']

я как написал алгоритм, который первый в голову пришел, нейронка тож самое накалякала. а если она думает как я, то все правильно

Исходная версия rtxtxtrx, :

import re

def find_russian_verbs(text):
    # Регулярка для извлечения русских слов (включая ё)
    word_pattern = re.compile(r'\b\w+\b')
    
    # Характерные признаки глаголов
    verb_endings = {
        # Инфинитивы
        'ть', 'ться', 'ти', 'тись', 'чь', 'чься',
        # Личные формы
        'у', 'ю', 'ешь', 'ет', 'ем', 'ете', 'ут', 'ют',
        'ил', 'ила', 'ило', 'или', 'ал', 'ала', 'ало', 'али',
        'ял', 'яла', 'яло', 'яли', 'сь', 'ся',
        # Деепричастия
        'я', 'в', 'вши', 'учи', 'ючи'
    }

    # Приставки и суффиксы
    prefixes = {'по', 'за', 'на', 'про', 'вы', 'от', 'до', 'при', 'под', 'пере', 'раз'}
    suffixes = {'ыва', 'ива', 'ва', 'ова', 'ева'}

    # Слова-исключения
    exceptions = {
        'путь', 'дверь', 'сеть', 'мать', 'дочь', 'плеть', 
        'рать', 'гость', 'кость', 'рожь', 'плоть'
    }

    verbs = []
    words = word_pattern.findall(text)
    
    for word in words:
        original_word = word
        word = word.lower()
        
        if len(word) < 3 or word in exceptions:
            continue
        
        # Проверка по окончаниям
        if any(word.endswith(end) for end in verb_endings):
            # Проверка характерных суффиксов
            if any(suff in word for suff in suffixes):
                verbs.append(original_word)
                continue
                
            # Проверка приставок
            if any(word.startswith(pref) for pref in prefixes):
                verbs.append(original_word)
                continue
                
            # Для возвратных глаголов
            if word.endswith(('ся', 'сь')):
                base = word[:-2]
                if len(base) >= 2 and any(base.endswith(end) for end in verb_endings):
                    verbs.append(original_word)

    return list(set(verbs))

# Пример использования
text = "Решая задачи и думая о жизни, он начал петь, но вдруг остановился, услышав странный звук."
print(find_russian_verbs(text))
# Вывод: ['Решая', 'думая', 'начал', 'петь', 'остановился', 'услышав']