проблемы в генерации глаголов в python
Я хочу найти основы глаголов. Я помещаю суффиксы, которые хочу удалить в переменной. проблема заключается в том, что он просто удаляет первый элемент в списке и не относится к остальным элементам и возвращает глагол без прерывания. Как мне изменить его, чтобы он мог прочитать все элементы в списке?
def stemming (verb): suffix=["ing", "ed", "es", "s"] for i in suffix: stem=verb.replace(i, "") return stem i+=1 >>> stemming ("wanting") 'want' >>> stemming ("wanted") 'wanted'
- Автоматизирует ли приложение автоматически частые запросы?
- Как определить, открыт ли файл в двоичном или текстовом режиме?
- python: изменения в моей переменной копирования влияют на исходную переменную
- микрофреймы python и библиотека запросов
- UnicodeDecodeError: кодек ascii не может декодировать байт 0xe2 в позиции 14: порядковый номер не в диапазоне (128) в GAE python?
Как только ваша функция вернется, она будет завершена. Он не продолжает проходить цикл, заменяя больше материала. Я думаю, что вы действительно хотите, это нечто большее:
def stemming(verb): suffixes = ["ing", "ed", "es", "s"] for suffix in suffixes: if verb.endswith(suffix): return verb[:-len(suffix)] return verb
Поэтому он фактически проверяет, заканчивается ли глагол в каждом суффиксе и не возвращается, если он не находит тот, который делает.
Потому что ты return
слишком рано. В тот момент, когда Python встречает return
внутри функции закрытия; он немедленно вернется к вызываемому ( функция, которая называется stemming
).
Измените свою функцию:
def stemming (verb): suffixs = ["ing", "ed", "es", "s"] for suffix in suffixs: stem = verb.replace(suffix, "") return stem # XXX: Moving the return outside of the loop
Вам также не нужно увеличивать здесь; это даже не целое число; вы повторяете список строк. Каждая итерация по suffixes
( я переименовал некоторые переменные, чтобы быть более читаемыми ), в свою очередь, будет строками, указанными в списке.
Если вы действительно хотели использовать вариант счетчика для индексирования suffixes
:
def stemming (verb): suffixs = ["ing", "ed", "es", "s"] i = 0 while i < len(suffixes): stem = verb.replace(suffixs[i], "") i += 1 return stem
Однако ; это действительно не нужно, поскольку вы можете просто использовать обычную и более Pythonic-итерацию по списку: for suffix in suffixes:
Я также считаю, что ваша функция также должна быть:
Код:
def stemming(verb): suffixs = ["ing", "ed", "es", "s"] for suffix in suffixs: verb = verb.replace(suffix, "") return verb
Вывод:
>>> stemming("singing") ''
Думаю об этом! 🙂
Также как в стороне; вы действительно должны использовать nltk для создания в любом случае, если только вы не делаете это в образовательных целях.
Смотрите: nltk.stem
Пример:
>>> from nltk.stem.lancaster import LancasterStemmer >>> st = LancasterStemmer() >>> st.stem("singing") 'sing' # NOT an empty string!!! >>> st.stem("wanting") 'want' >>> st.stem("wanted") 'want'
Переместите возврат из цикла и удалите i += 1
. Здесь бесполезно:
def stemming(verb): suffix=["ing", "ed", "es", "s"] for i in suffix: verb=verb.replace(i, "") return verb
Вы помещаете оператор return внутри цикла, что создает неправильное поведение. Я думаю, вы имели в виду нечто подобное:
def stemming (verb): suffix=["ing", "ed", "es", "s"] stem = verb for i in suffix: stem=stem.replace(i, "") return stem
Я также удалил i ++, который на деле бесполезен. Другое дело, конечно, что вы должны работать всегда на одной и той же переменной, чтобы поймать все изменения (либо стебель, либо глагол – я использовал стержень для большей ясности, но вы также можете использовать глагол и избавиться от задания).
Как заметил один комментатор, ваш алгоритм создает какое-то странное поведение на некоторых глаголах.
Я бы предложил изменить его так:
def stemming (verb): suffixes = ["ing", "ed", "es", "s"] stem = verb for suffix in suffixes: if stem.endswith(suffix): stem = stem[:-len(suffix)] break return stem
При этом изменении следует удалить только один суффикс (из-за перерыва), а удаление будет происходить только в конце глагола.
return
всегда будет заканчивать функцию и возвращаться туда, где вы ее вызывали. Используйте доход вместо return
если вы хотите сгенерировать несколько значений.
В качестве дополнительной заметки удалите инкремент i
потому что i
не является целым числом в вашем коде.
- Поиск разницы между двумя сложными словарями
- Нет модуля с именем lxml.html при запуске скрипта python на Fedora
- URLFetch за прокси-сервером при создании App Engine
- Pycharm Remote Python Interpreter через SSH-шлюз, переадресация X11
- Python – не может преобразовать в int
- Есть ли использование пустого кортежа в Python?
- Как объединить и получить один файл Python, разрешив импорт
- Как удалить строку из файла в python
- Python NotImplemented constant
- Цель else и, наконец, обработка исключений
- импортировать модуль механизации в скрипт python