Mam listę ciągów:

['bill', 'simpsons', 'cosbys', 'cosby','bills','mango', 'mangoes']

Jakie jest najlepsze, aby usunąć wszystkie grupy z tej listy? Chcę więc wyjście:

['bill', 'simpsons', 'cosby','mango']
6
Bruce 13 listopad 2011, 08:53

4 odpowiedzi

Najlepsza odpowiedź

Ogólnie rzecz biorąc, proces nazywa się `stemming 'i jest pakiet o nazwie" stemming "dla Pythona.

Używane tak:

from stemming.porter2 import stem
stem("simpsons")

Stemming robi więcej niż tylko mnóstwo łodygi, ale można zmodyfikować pakiet stemming, aby wykonać mnogą stemming. Spójrz na źródło: http://tartarus.org/martin/sporterstemmer/python.txt .

6
Anthony Blake 13 listopad 2011, 05:12

Z Lingwistyka Nodebox wymaga tylko dwóch linii:

import en
only_singulars = [w for w in noun_list if w == en.noun.singular(w)]

Biblioteka implementuje Zasady pluralizacji Conway rozważy wszelkiego rodzaju wyjątkowych przypadków.

4
Suzana 7 marzec 2013, 16:59

Zasady pluralizacji mają wiele przypadków narożnych. Być może możesz ominąć podejście oparte na zasadach i użyć wyszukiwania słownika, aby zidentyfikować formę mnogą i pojedynczą formę słowa.

1
Raymond Hettinger 13 listopad 2011, 04:59

Nie jest to możliwe, chyba że dostarczono dodatkowe informacje. Na przykład, wszystkie ciągi na liście będą angielskimi słowami? Czy będą rzeczownikami? Jeśli tak, wydaje się, że istnieje kilka pakietów stemmingowych dla Pythona, który prawdopodobnie wykonuje dobrą robotę w większości przypadków, ale będziesz miał więcej sukcesów, tym bardziej można określić swoje wymagania. A jeśli lista jest tworzona z wejścia użytkownika, użytkownik może nie zgodzić się z wynikami przetwarzania; Rozważ "Octopi", "Indeksów", et Ceteta.

-1
Kendall Lister 13 listopad 2011, 05:04