Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Korekta ortograficzna, klasa PHP5
Speedy
post
Post #1





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

Ostrzeżenie: (0%)
-----


Hej.

Napisałem niedawno klasę do sprawdzania, czy ktoś nie strzela byków w swoim tekście.
Mam cichą nadzieję, że przyczynię się tym do podwyższenia poziomu treści pisanych w naszym pięknym języku, a zwłaszcza w internecie. Wszak nie każdy ma Firefoxa z korektą pisowni (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .
Klasa korzysta ze słownika ortograficznego PWN dostępnego w internecie na http://so.pwn.pl/, dlatego może być dość powolna przy sprawdzaniu bardzo długich tekstów. Natomiast z tymi krótszymi poradzi sobie szybciej (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .

Kod klasy:

  1. <?php
  2.  
  3. /**
  4.  * Klasa służąca do korekty ortograficznej
  5.  * korzystająca z internetowego słownika ortograficznego PWN (http://so.pwn.pl/)
  6.  */
  7. class korektaOrtograficzna
  8. {
  9.  
  10. /**
  11.  * tekst do sprawdzenia
  12.  */
  13. private $text;
  14.  
  15. /**
  16.  * tablica z wyrazami posiadającymi błędy ortograficzne
  17.  */
  18.  public $mistakeArray = array();
  19.  
  20. /**
  21.  * sprawdzony tekst z zaznaczonymi błędami
  22.  */
  23. public $markedText;
  24.  
  25. /**
  26.  * konstruktor
  27.  * uruchamia odpowiednie metody
  28.  * @param string text tekst do korekty
  29.  * @return void
  30.  */
  31. public function __construct($text)
  32. {
  33. $this->text = $text;
  34. $this->checkText();
  35. }
  36.  
  37. /**
  38.  * łączy się ze słownikiem ortograficznym PWN
  39.  * i sprawdza czy wyraz jest poprawny
  40.  * @param string $word
  41.  * @return bool
  42.  */ 
  43. private function isCorrectWord($word)
  44. {
  45. $content = file_get_contents('http://so.pwn.pl/lista.php?co='.$word);
  46. return (bool)!strstr($content,'Nie znaleziono haseł spełniających podany warunek.');
  47. }
  48.  
  49. /**
  50.  * przetwarza podany tekst na tablicę z wyrazami,
  51.  * usuwa ewentualne znaki interpunkcyjne i znaczniki HTML
  52.  * @param void
  53.  * @return array
  54.  */
  55. private function text2array()
  56. {
  57. $this->text = htmlspecialchars($this->text);
  58. return (array)explode(' ',preg_replace('/[.,?!]/','',$this->text));
  59. }
  60.  
  61. /**
  62.  * dokonuje korekty podanego tekstu,
  63.  * przekazuje niepoprawne wyrazy do tablicy z błędami
  64.  * oraz wyróżnia niepoprawne wyrazy
  65.  * i przekazuje zmodyfikowany tekst do odpowiedniej zmiennej
  66.  * @param void
  67.  * @return void
  68.  */
  69. private function checkText()
  70. {
  71. $textArray = $this->text2array();
  72. $mistakeArrayMarked = array();
  73.  
  74. foreach($textArray as $word)
  75. {
  76. if(!$this->isCorrectWord($word))
  77. {
  78. $this->mistakeArray[] = $word;
  79. $mistakeArrayMarked[] = '<span style="color:red; font-weight:bold;">'.$word.'</span>';
  80. }
  81. }
  82.  
  83. $this->markedText = str_replace($this->mistakeArray,$mistakeArrayMarked,$this->text);
  84. }
  85.  
  86. }
  87.  
  88. ?>


Przykład użycia:

  1. <?php
  2.  
  3. $tekstDoSprawdzenia = 'Szedł Jasió przes las i zgubił czerfony pas.';
  4.  
  5. $objKorektaOrtograficzna = new korektaOrtograficzna($tekstDoSprawdzenia);
  6.  
  7. echo $objKorektaOrtograficzna->markedText; // sprawdzony tekst z wyróżnionymi błędami
  8.  
  9. echo '<br/>';
  10.  
  11. echo 'Liczba znalezionych błędów: '.count($objKorektaOrtograficzna->mistakeArray);
  12.  
  13. echo '<br/>Błędy:<br/>';
  14.  
  15. print_r($objKorektaOrtograficzna->mistakeArray); // wyświetlenie tablicy ze znalezionymi błędami
  16.  
  17. ?>


Ten post edytował Speedy 21.09.2007, 22:30:37
Go to the top of the page
+Quote Post
Cosi*
post
Post #2





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 9.07.2007
Skąd: Dąbrowa Górnicza

Ostrzeżenie: (0%)
-----


Ciekawy pomysł z wykorzystaniem słownika PWN-u. Ostatnio miałem podobny problem i użyłem słownika "kurnikowego", który jest standardowo dołączany do ispella w Linuksie (ale można go też ściągnąć osobno). Wtedy masz słownik "na miejscu" i szybciej, ale waży toto 41 mega, więc bez odchudzenia się nie obejdzie.
Go to the top of the page
+Quote Post
Speedy
post
Post #3





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

Ostrzeżenie: (0%)
-----


Ostatnio natrafiłem na coś fajnego o podobnym działaniu, co moja klasa, tylko że via AJAX & JS: http://orangoo.com/labs/GoogieSpell/ .
Wiadomo, że korzystanie ze specjalnie przygotowanych API zawsze będzie szybsze od aplikacji korzystających z zasobów internetu "na żywca", dlatego informacja o tym projekcie może się komuś przydać (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .
Go to the top of the page
+Quote Post
Kocurro
post
Post #4





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Proponowałbym dołożyć jeszcze cache'owanie wyników.
Go to the top of the page
+Quote Post
Fixer
post
Post #5





Grupa: Zarejestrowani
Postów: 123
Pomógł: 0
Dołączył: 24.10.2004
Skąd: TG

Ostrzeżenie: (0%)
-----


ja użyłem do tego własną bazę zaimportowaną do MySQL'a gdzięki temu można dodawać własne słowa...
w bazie 3 820 062 słów, razem 104 MB

Tu macie rezultat
http://www.ortografik.rox.pl/

Teraz zostało mi tylko użyc ajaxa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
a potem jakieś komponenty porobić by można było tego użyć np na własnej stronie...

Ten post edytował Fixer 17.02.2008, 14:16:51
Go to the top of the page
+Quote Post
Moli
post
Post #6





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dałem
Cytat
idem sobiem polnom drogom

A znalazło mi tylko 2 błedy (sobiem i polnom) (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Fixer
post
Post #7





Grupa: Zarejestrowani
Postów: 123
Pomógł: 0
Dołączył: 24.10.2004
Skąd: TG

Ostrzeżenie: (0%)
-----


haa no zgadza sie a to dlatego że słownik będzie miał mozliwość sprawdzania w różnych językach a nawet dialektach jak np gwara śląska a na razie wszystkie słowa są wpierniczone do jednego wora żeby sprawdzić wydajność bazy zeby ją dostosować...

PS bazę słów możesz sobie zrobić samemu ze slownika alernatywnego http://www.kurnik.pl/slownik/growy/
mozesz tam jeszcze dokleić nazwy miast, slowa techniczne, odmiany słów, imion...

Ten post edytował Fixer 17.02.2008, 15:44:33
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 20:36