Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP] Prosty sposób na wykrywanie języka

Napisany przez: AmyLokmart 3.12.2021, 10:52:15

Czy istnieje prosty sposób na wykrywanie języka przez funkcje PHP?
Nie chodzi mi o gotowce, które wykorzystują API np: google, yandex i inne oraz skomplikowane biblioteki czy GEO.
Chciałabym wykryć język prostym skryptem.

Skrypt najlepiej jakby wykrywał popularne języki: angielski, hiszpański, niemiecki, rosyjski, chiński, arabski, francuski, włoski, polski, czeski itd (google wykrywa 164 języki)

Szukałam rozwiązania,ale wszędzie podają skrypty, które wymagają różnych pakietów albo API sad.gif

Zastanawiam się czy nie spróbować zrobić tego od podstaw. No wiecie prosty skrypt smile.gif

Jakich funkcji musiałabym na początek użyć?

A może ktoś ma gotowy skrypt?

Jeśli ktoś coś znalazł, albo wie jak to ugryźć to Proszę o odpowiedź smile.gif

Dziękuję i pozdrawiam.

PS: oczywiście jak coś znajdę, albo stworzę to od razu kliknę na to forum smile.gif

Napisany przez: Pyton_000 3.12.2021, 11:33:13

Słabo szukałaś smile.gif https://github.com/landrok/language-detector

Napisany przez: AmyLokmart 3.12.2021, 17:39:32

Nie chodzi mi o gotowce, które wykorzystują API np: google, yandex i inne oraz skomplikowane biblioteki czy GEO.

Jak pisałam na początku chciałabym wykrywać język prostym skryptem.
"Pyton_000" podał mi gotowca i nie opisał jak z niego korzystać. Trudno było mi go zainstalować (bo jestem dziewczyną i dopiero w tych tematach początkuje)
Ale udało mi się jednak zainstalować "Language/detector" i okazało się, że jest to skomplikowany pakiet z użyciem bibliotek z autoload.php, do którego trzeba było podpiąć index i określić wykonanie.
Kiedy to zrobiłam to okazało się, że w zmiennej "$text" prawidłowo wykrywa język angielski a polski w wynikach miał: es, pt, sw, hr czasami pl sad.gif

Panie "Pyton_000" czy znasz prostszy sposób na wykrywanie języka? Chciałabym stworzyć skrypt, który nie będzie korzystał z bibliotek i będzie to jeden prosty moduł (skrypt może na początek wykrywać język angielski i polski, potem się będę zastanawiać jak dodać kilka języków).
A może ktoś ma inne rozwiązanie? Albo też chciałby stworzyć to co ja? smile.gif

Czekam na kolejne propozycje chłopaki smile.gif Pozdrawiam

Napisany przez: viking 3.12.2021, 17:45:12

Jeśli chcesz ręcznie wykryć język klienta to musisz przeparsować ten nagłówek https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language. Ale rozumiem że chodzi jednak o wykrywanie języka tekstu a nie języka domyślnego. Jaki problem dać composer require pakiet, potem dołączyć vendor/autoload.php? Musisz się tego nauczyć jeśli chcesz programować bo to podstawa.

Napisany przez: AmyLokmart 3.12.2021, 18:40:26

Jak już napisałam wyżej uporałam się z pakietem i już wiem jak używać "composer require nazwa_pakietu".
Wykrywanie języka w przeglądarce już umiem, np w JS:

  1. <http://december.com/html/4/element/script.html>
  2. var AmyLangBrows = "Język przeglądarki: " + navigator.language;
  3. document.write(AmyLangBrows);
  4. </http://december.com/html/4/element/script.html>


W PHP napisałam tak:

  1. $lang = http://www.php.net/substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
  2. $AmyLang = ['pl'];
  3. $lang = http://www.php.net/in_array($lang, $AmyLang) ? $lang : 'en'; // jeśli inny pokaż "en"
  4. http://www.php.net/print $lang;


Masz rację "viking" chcę rozpoznawać tekst string'u w kategorii "jaki to język" prostym skryptem.
Rozpoznawanie języka przeglądarki mi nic nie da (to ma sens jeśli chciałabym pokazywać użytkownikom treści w odpowiednim języku dla ich lokalizacji)

W dalszym ciągu chciałabym dowiedzieć się czy można stworzyć prosty skrypt do detekcji języka na podstawie podanego tekstu.

Jeśli nie to nie będę Was męczyć chłopaki.
Gdzieś na boku jak będzie mi się nudzić i przypomnę sobie to spróbuje sama coś wykombinować smile.gif

Napisany przez: gino 3.12.2021, 19:46:31

Chcesz próbować sama to ok, ale musisz umieć zrozumieć podstawy jak to zrobić. Mając wiedzę możesz zacząć tworzyć algorytm jak to oprogramować. Poszukaj informacji o identyfikacji języków, czytaj jak te zasady ewaluowały i jak to przenieś na dany język programowania.Zacznij od https://tnlessone.wordpress.com/2007/05/13/how-to-detect-which-language-a-text-is-written-in-or-when-science-meets-human/ artykułu. W nim znajdziesz odwołania do oryginalnych opracowań tzw. N-gramów.
Możesz też zrobić to w najbardziej prosty sposób, czyli utworzyć tablice/zapisać w bazie danych słowa kluczowe dla każdego języka (np. en=['the', 'be', 'to', 'of', 'and', 'a', 'in', 'that', 'have'] itd) i na ich podstawie szukaj ich w badanym tekście. Ale tam metoda jest dla skończonej liczby języków.
Tak więc powodzenia.

edit
poprawa literówek smile.gif

Napisany przez: AmyLokmart 3.12.2021, 22:10:14

Dziękuję Tobie Ślicznie "Gino" za Twoją wiadomość i naprowadzenie mnie na to od czego zacząć smile.gif

"Pyton_000" podsunął rozwiązanie wykrywania języka ze string'u pod adresem: https://github.com/landrok/language-detector, niestety nie jest to dobre rozwiązanie, bo zawiera wiele błędów (niepoprawnie interpretuje teksty, dla języka polskiego kiedy pisałam różne frazy pokazywał, że jest to język: hr (chorwacki), sw (suahili), pt (portugalski), es (hiszpański) i czasami pl (polski), poprawnie interpretował teksty w języku angielskim "en")

Znalazłam lepsze rozwiązanie: https://github.com/pear/Text_LanguageDetect (lepiej pobrać PearText_LanguageDetect niż Landrok/Language-Detector, ponieważ jest, o wiele mniej błędów - sprawdzałam wiele fraz i Pear podało błędnie tylko jedno wykrycie dla języka: Somali (so) we frazie: "Madonna - La Isla Bonita" - przyznam się, że nie wiem dlaczego smile.gif). Po za tym Pear jest mniej rozbudowane i nie korzysta z dodatkowych bibliotek, typów czy rozwiązań jak Landrok/Language-Detector+Webmozart+Symfony do działania.

Zainstalowałam sobie Pear/Text_LanguageDetect i na razie z niego będę korzystać.

Jak coś ciekawego zacznę tworzyć dla prostego skryptu wykrywającego w string'u jaki to język to na pewno napiszę tutaj.
I oczywiście czekam na kolejne podpowiedzi smile.gif

Napisany przez: Pyton_000 4.12.2021, 20:34:56

Brawo że udało Ci się zainstalować paczkę.
Detekcja jezyka jest tak dobra jak dobre są słowniki z których czerpie skrypt.

Pokaż tekst dla którego próbowałaś zrobić detekcją i wyszedł ci taki "zonk".

Napisany przez: AmyLokmart 4.12.2021, 22:24:06

Dla detektora języka: https://github.com/landrok/language-detector (Landrok/Language-Detector)
Dla (Landrok/Language-Detector) Trudna była fraza: "To jest zdanie po polsku. Ciekawe czy detektor sobie z tym poradzi.", którą uznał za język hiszpański: "es"

Dla detektora języka: https://github.com/pear/Text_LanguageDetect (Pear/Text_LanguageDetect)
Dla (Pear/Text_LanguageDetect) fraza: "To jest zdanie po polsku. Ciekawe czy detektor sobie z tym poradzi.", nie była problemem i od razu wskazał język polski "pl"

To tylko jeden z wielu przykładów, dlatego wybrałam (Pear/Text_LanguageDetect), a ten drugi pakiet skasowałam.

Napisany przez: Pyton_000 4.12.2021, 23:27:57

Zerknąłem na obie libki. Obie bazują na tym samych schemacie. Wzięto N wyrazów i wygenerowano z nich set danych 1, 2 i 3 literowych na podstawie teksów i przypisano im ilość powtórzeń w zestawie danych.
Potem sprawdzany tekst również dzielony na 3-znakowe ciągi i dopasowywane. Potem sprawdzane jest ile wspólnych dopasowań jest w danym słowniku z tekstem.

Wynika z tego że wszystko zależy jak duży i jak dobre źródło znajdziesz do nakarmienia skryptów. Tutaj wypadł lepiej drugi skrypt ale oba bazują na tym samym koncepcie.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)