Stworzenie programu, który będzie rozumiał w jednym języku co jest napisane nie jest zadaniem prostym. Wystarczy spojrzeć na to, jakie problemy mają z tym tacy giganci jak Google, Microsoft, Apple czy Amazon.
Jednak jeśli bardzo chcesz spróbować coś takiego stworzyć (sam próbowałem coś podobnego i była to całkiem niezła zabawa!), to tak:
Na początek:
- Znajomość języka obcego – nawet na średnim poziomie będzie nie mało problemów, bo nie przewidzisz wielu wyjątków. Jednak nawet jak masz podstawową wiedzę w tym zakresie to i tak może być z tego dobra zabawa.
- Apach OpenNLP – biblioteka (posiadająca wiele portów na najróżniejsze języki programowania) do przetwarzania języka naturalnego (między innymi angielskiego).
- Baza słów/ tłumaczeń pomiędzy językami – nie jest prosto uzyskać taką bazę danych. Są one wartościowe i mało kto chce się nimi dzielić za darmo. Konta z ograniczeniami i dostępem do translacji moża uzyskać na stronach Pons'a oraz Oxford Dictionary.
Myślę, że wraz z tymi trzema podstawowymi punktami można zacząć swoją zabawę z prostymi tłumaczeniami.
Co ode mnie?
Nie znalazłem nic na temat tworzenia translatora w języku polskim
Temat jest bardzo złożony i zazwyczaj opiera się o wykorzystanie sztucznej inteligencji wraz z dużymi zbiorami danych (big data). Rzadko kiedy w polskich odmętach internetu można znaleźć jakiś ambitniejszy materiał czy nawet projekt skierowany do publiki dotyczący programowania i wykraczający po za podstawy – wielka szkoda i mam nadzieję, że będzie się to zmieniać.
Spróbuj najpierw zrobić prosty translator
Za nim będziesz próbował zrobić translator, który będzie tłumaczył z każdego języka na każdy spróbuj najpierw zrobić coś co będzie tłumaczyło tylko pomiędzy polskim a angielskim. To już będzie sprawiało dużo problemów ale zarazem wiele frajdy i satysfakcji.
Jakbym widział przepływ działania takiego translatora?
Na przykład mamy zdanie "Jaś idzie do domu". W języku angielskim mamy dwie możliwości "Jaś is going home" lub "Jaś goes home", Chociaż w tym przypadku na pewno możemy się kierować w stronę pierwszego tłumaczenia. I tu pojawia się pierwszy problem: gramatyka. I to mało tego, jedna forma gramatyczna w naszym języku odpowiada dwóm formom gramatycznym w języku obcym! Ale do tego wrócimy.
Rozbicie zdania:
"Jaś idzie do domu " zamieniamy na formy podstawowe: "Jaś", "iść", "do (gdzie)", "dom". W tym miejscu właśnie działa OpenNLP od Apache, pomaga rozbić słowa na pojedyncze słowa oraz określić ich formy podstawowe.
Tłumaczenie:
Mając pojedyncze słowa (zwane często tokenami) możemy je przetłumaczyć:
Jaś |
Jaś |
Iść |
go |
do (gdzie) |
to |
dom |
home/house |
W tym momencie tłumacząc jeden do jeden uzyskujemy następujący efekt:
"Jaś go to home/house"
I tu zaczynają się kolejne schody.
Jak określić, czy autor miał na myśli home (dom rodzinny, w którym mieszkamy) czy house (po prostu jakiś dom w końcu używamy tego słowa do określenia dowolnego budynku mieszkalnego na ulicy, czy mieszkania)
Co do formy gramatycznej zarówno wersji z home jak i house uszłoby (chociażby tutaj przykłady użycia), jednak jak powiedziałem wyżej lepsza, według mnie, byłaby forma present cointinous, wiec potrzebowalibyśmy funkcję zmieniającą formę gramatyczną: "Jaś is going home /to house". Jednak na jakiej podstawie określić, która forma jest poprawna?
To tyle, jeśli coś jeszcze kogoś interesuje bądź ma obiekcje to piszcie w komentarzach – może uda się dopracować tę odpowiedź.