2011-12-08 5 views
9

Szukam sposobu, aby utworzyć funkcję w Pythonie, gdzie przekazujesz ciąg znaków i zwraca, czy jest poprawnie napisane. Nie chcę sprawdzać w słowniku. Zamiast tego chcę sprawdzić podpowiedzi Google dotyczące pisowni. W ten sposób nazwiska celebrytów i inne właściwe rzeczowniki będą liczone jako poprawnie napisane.jak zaimplementować moduł sprawdzania pisowni python za pomocą Google'a "czy miałeś na myśli?"

Oto, gdzie jestem w tej chwili. Działa przez większość czasu, ale miesza się z niektórymi nazwiskami celebrytów. Na przykład rzeczy takie jak "cee lo green" lub "posner" zostają oznaczone jako niepoprawne.

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

Bądź ostrożny: [5.3 Użytkownik zgadza się nie uzyskiwać dostępu (ani podejmować prób uzyskania dostępu) każdy z Usług w sposób inny niż za pomocą interfejsu udostępnionego przez Google, o ile nie zostały wyraźnie dozwolone, aby to zrobić w odrębnej umowie z Google. Użytkownik wyraźnie zgadza się nie uzyskiwać dostępu do usług (ani próbować uzyskać do nich dostępu) za pomocą jakichkolwiek zautomatyzowanych środków (w tym korzystania ze skryptów lub robotów sieciowych) oraz zapewnia zgodność z instrukcjami określonymi w pliku robots.txt znajdującym się w Usługach. .] (http://www.google.com/accounts/TOS) – sarnold

+0

Wygląda na to, że nie powtarzasz poprawnie wyniku 'wyniku'. – eumiro

+0

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

Odpowiedz

6

Zamiast trzymać pana Google, wypróbuj inne wielkie chłopaki.

  1. Jeśli naprawdę chcesz, aby trzymać z wyszukiwarek, które liczą żądania stron, Yahoo i Bing zapewniają znakomite możliwości. Yahoo dostarcza bezpośrednio usługi sprawdzania pisowni za pomocą tabel YQL (bezpłatny: 5000 zgłoszeń/dzień i niekomercyjny).

  2. Masz dużą liczbę Python API, które są w stanie zrobić wiele podobna magia w tym na rzeczowniki, że wspomniane (czasami może zawrócić - po całej jej gdzieś w oparciu o prawdopodobieństwo)

So, w drugim przypadku, masz dobrą listę (całkowicie za darmo)

  1. GNU - Aspell (nawet dostał powiązań Python)
  2. PyEnchant
  3. Whoosh (Robi dużo więcej niż sprawdzanie pisowni, ale myślę, że ma jakąś przewagę nad nim.)

Mam nadzieję, że powinny one dać jasny obraz tego, jak to wszystko działa.

W rzeczywistości sprawdzanie pisowni obejmuje bardzo złożone mechanizmy w obszarach uczenia maszynowego, sztucznej inteligencji, NLP itd. Itd. O wiele więcej. Firmy takie jak Google/Yahoo w rzeczywistości nie oferują swojego API w całości za darmo.

+0

Co oznacza "Nikt nie da im za darmo i open source"? W swojej odpowiedzi podajesz kilka darmowych i otwartych źródeł. –

+0

@MichaelHoffman Miałem na myśli bardziej zaawansowane API, takie jak Yahoo Spell Checking lub Google Prediction API .. – Surya

9

Peter Norvig powie Ci jak wdrożyć spell checker in Python.

+0

ale czy to nie jest po prostu sprawdzanie ze słownikiem w pliku tekstowym? –

+0

Czy czytałeś? – duffymo

+0

Tak, zrobiłem. Nie wychodzi do Google i nie sprawdza, czy słowa są poprawne, po prostu wyszukuje określony plik tekstowy. –

Powiązane problemy