2011-12-08 53 views
9

Sto cercando un modo per creare una funzione in python in cui passi una stringa e restituisca se è scritta correttamente. Non voglio controllare un dizionario. Invece, voglio che controlli i suggerimenti di ortografia di Google. In questo modo, i nomi delle celebrità e altri nomi propri verranno conteggiati correttamente.come implementare il correttore ortografico di python usando google "volevi dire?"

Ecco dove sono finora. Funziona la maggior parte del tempo, ma mette a disagio alcuni nomi di celebrità. Ad esempio, cose come "cee lo green" o "posner" vengono contrassegnate come errate.

import httplib 
import xml.dom.minidom 

data = """ 
<spellrequest textalreadyclipped="0" ignoredups="0" ignoredigits="1" ignoreallcaps="1"> 
<text> %s </text> 
</spellrequest> 
""" 

def spellCheck(word_to_spell): 

    con = httplib.HTTPSConnection("www.google.com") 
    con.request("POST", "/tbproxy/spell?lang=en", data % word_to_spell) 
    response = con.getresponse() 

    dom = xml.dom.minidom.parseString(response.read()) 
    dom_data = dom.getElementsByTagName('spellresult')[0] 

    if dom_data.childNodes: 
     for child_node in dom_data.childNodes: 
      result = child_node.firstChild.data.split() 
     for word in result: 
      if word_to_spell.upper() == word.upper(): 
       return True; 
     return False; 
    else: 
     return True; 
+11

Attenzione: [5.3 L'utente accetta di non accedere (o tentare di accedere) a nessuno dei Servizi con qualsiasi mezzo diverso dall'interfaccia fornita da Google, a meno che non sia stato specificamente autorizzato a farlo in un accordo separato con Google. L'utente accetta espressamente di non accedere (o tentare di accedere) a nessuno dei Servizi tramite qualsiasi mezzo automatizzato (incluso l'uso di script o web crawler) e garantisce di rispettare le istruzioni riportate in qualsiasi file robots.txt presente sui Servizi. .] (http://www.google.com/accounts/TOS) – sarnold

+0

Non sembra che iterate correttamente su 'result'. – eumiro

+0

https://bitbucket.org/mchaput/whoosh/wiki/Home – Surya

risposta

6

piuttosto che attaccare al signor Google, provare altre grandi compagni.

  1. Se davvero si vuole attaccare con i motori di ricerca che contano le richieste di pagine, Yahoo e Bing forniscono alcune caratteristiche eccellenti. Yahoo fornisce direttamente servizi di controllo ortografico utilizzando tabelle YQL (gratuito: 5000 richiesta/giorno e non commerciale).

  2. avete buon numero di Python API che sono in grado di fare una magia simile molto anche su nomi che hai citato (a volte possono girare intorno - dopo tutto il suo da qualche parte in base alla probabilità)

Quindi, nel secondo caso, si ha una buona lista (totalmente gratuito)

  1. GNU - Aspell (Abbiamo avuto anche i binding python)
  2. PyEnchant
  3. Whoosh (che fa molto di più che il controllo ortografico, ma penso che abbia un po 'di vantaggio su di esso.)

Spero che dovrebbe dare una chiara idea di come funzionano le cose.

In realtà il controllo ortografico coinvolge meccanismi molto complessi nelle aree di apprendimento automatico, AI, PNL, ecc. Ecc. Quindi, aziende come Google/Yahoo non offrono realmente la loro API interamente gratuitamente.

+0

Cosa significa "Nessuno li darà gratuitamente e open source"? Elencherai diversi esempi gratuiti e open source nella tua risposta. –

+0

@MichaelHoffman In realtà mi riferivo a API più sofisticate come Yahoo Spell Checking o Google Prediction API .. – Surya

9

Peter Norvig spiega come implementare spell checker in Python.

+0

ma non basta controllare un dizionario in un file di testo? –

+0

Hai letto? – duffymo

+0

Sì, l'ho fatto. Non esce su Google e controlla se le parole sono corrette, cerca solo in un file di testo specificato. –

Problemi correlati