#python
#python
Вопрос:
У меня есть список строк:
['bill', 'simpsons', 'cosbys', 'cosby','bills','mango', 'mangoes']
Как лучше всего удалить все множественное число из этого списка?
Итак, я хочу, чтобы результат был:
['bill', 'simpsons', 'cosby','mango']
Комментарии:
1. Разве simpsons не множественное число?
2. Это будет сложно, особенно если вы рассматриваете такие слова, как дети, выпускники и мыши. Что бы вы вообще сделали для moose или fish?
Ответ №1:
В общем, процесс называется `stemming», и для python существует пакет под названием «stemming».
Используется примерно так:
from stemming.porter2 import stem
stem("simpsons")
Обработка основ делает больше, чем просто использование множественных основ, но вы могли бы изменить пакет обработки основ, чтобы он выполнял только обработку множественных основ. Взгляните на исходный код: http://tartarus.org/martin/PorterStemmer/python.txt
Ответ №2:
С помощью NodeBox Linguistics это занимает всего две строки:
import en
only_singulars = [w for w in noun_list if w == en.noun.singular(w)]
Библиотека реализует правила плюрализации Конвея, которые учитывают все виды исключительных случаев.
Ответ №3:
У правил плюрализации много угловых падежей. Возможно, вы можете обойти подход, основанный на правилах, и использовать поиск по словарю для определения формы множественного числа и формы единственного числа слова.
Ответ №4:
Это невозможно, если не предоставлена дополнительная информация. Например, все строки в вашем списке будут английскими словами? Будут ли они существительными? Если это так, то, по-видимому, существует несколько исходных пакетов для Python, которые, предположительно, хорошо справляются с работой в большинстве случаев, но у вас будет больше успеха, чем более строго вы сможете определить свои требования. И если список создается на основе пользовательского ввода, пользователь может не согласиться с результатами вашей обработки; рассмотрите «octopi», «indexes» и так далее.