2012-08-30 22 views
8

Domanda come nell'argomento: sto provando a farlo in python per l'app in Google App Engine. So che la libreria PyEnchant è usata per il riconoscimento del linguaggio naturale, ma non vedo se posso usarla per il mio problema e come.Come verificare se la parola data è al plurale o singolare?

+0

potrebbe voler controllare NLTK http://nltk.org/ –

risposta

10

Verificare la libreria inflect 0.2.4.

flettere 0.2.4

correttamente generare plurali, sostantivi singolari, ordinali, indefiniti articoli; convertire i numeri in parole

+1

Questo è bello. Non ne avevo idea. – David

+5

@Ashwini: inflect.py può * generare * plurali, ma può * rilevare * i plurali? – Hugo

2

Non si dice se il problema è isolato parole o parole nel contesto di frasi in lingua inglese.

Ad esempio "la pecora" potrebbe essere singola o plurale. Tuttavia:

La pecora era nel campo

è singolare e

Le pecore erano nel campo

è plurale.

Per quest'ultimo è necessario un tagger di parte del discorso, che identificherà i ruoli dei nomi nella frase. Ce ne sono molti liberi e commerciali e Wikipedia ha an excellent list. NLTK è probabilmente la scelta naturale per Python.

Se si dispone solo di parole isolate, il meglio che si può fare è fare riferimento ai molti dizionari (come che indicherà le forme singolari e plurali dei nomi).

5

Ashwini faceva riferimento all'utile libreria inflect, ma non spiegava come verificare se una determinata parola è al plurale o singolare.

Se si sa che la parola o è un singolare o plurale si può usare:

singular_noun(word) 

Ciò restituirà False se la parola non è un plurale, quindi la tua parola dovrebbe in teoria essere singolare.

Prendere nota delle carenze visualizzate nei miei esempi quando si parla di plurali classici, forme che possono essere singolari o plurali e il fatto che restituirà False per le forme non riconosciute in generale.

import inflect 
inflect = inflect.engine() 

english_words = ["hat", "hats", 
       "hero", "heroes", 
       "cherry", "cherries", 
       "dish", "dishes", 
       "stadium", "stadia", "stadiums", 
       "mitochondrion", "mitochondria", 
       "sheep", "a sheep", "the sheep", 
       "whjkjhkjh", "msipelling"] 

for en in english_words: 
    if inflect.singular_noun(en) is False: 
     print (en, "is singular") 
    else: 
     print (en, "is plural") 

>>> 
hat is singular 
hats is plural 
hero is singular 
heroes is plural 
cherry is singular 
cherries is plural 
dish is singular 
dishes is plural 
stadium is singular 
stadia is singular 
stadiums is plural 
mitochondrion is singular 
mitochondria is singular 
sheep is plural 
a sheep is plural 
the sheep is plural 
whjkjhkjh is singular 
+0

'some_boolean_value is False' è anti-pattern, usa' not some_boolean_value' invece –

Problemi correlati