Alfabet fonetyczny angielski - IPA jak wyświetlić?

Alfabet fonetyczny angielski - IPA jak wyświetlić?
AndkowyUczeń
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0

Ogólnie pracuję nad swoimi zdolnościami językowymi, a konkretniej to nad wymową z angielskiego. I jedno z ćwiczeń (poza normalną rozmową z kimś) polega na tym, że słucham audiobooka jakiejś książki/czegokolwiek zatrzymuję lektora po zdaniu i powtarzam zanim patrząc się dodatkowo na tekst (nagrywając się na dyktafon). i tak do końca rozdziału. Po czasie stwierdziłem, że żeby nauka była bardziej świadoma dla mnie i efektywniejsza, zamiast mieć przed sobą normalny tekst, warto byłoby mieć jego transkrypcje fonetyczną w alfabecie fonetycznym IPA, który znam i jest mi łatwiej dzięki niemu poprawnie wymawiać dany wyraz.

Jednak takie manualne wpisywanie wyrazu po wyrazie i przepisywanie tego do notatnika lub na kartkę przy wykorzystaniu np. słownika diki byłoby bardzo czasochłonne. Dlatego stwierdziłem, że warto byłoby napisać do tego program. Teraz problemy/wątpliwości, które napotkałem (ogólnie to jedyny język, który znam w miarę dobrze to C++, więc mówimy właśnie o nim):

  1. Główny problem to to, że w ASCII nie ma takich znaków i jak np. skopiuję sobie ə to wyświetli się ? , z tego powodu chciałem zastąpić poszczególne znaki z IPA po prostu jakimiś szczególnymi/charakterystycznymi/podobnymi znakami ASCII np. dla wspomnianego ə mógłbym wykorzystać znak ASCII 0137 -> ë , co byłoby dla mnie dość intuicyjne i nie przeszkadzałoby mi to, ale gdy wpiszę do swojego programu, żeby wyświetlił mi go to zamiast tego w konsoli dostaję -> title , czyli jakiś zupełnie inny znak, choć nie wiem czemu. Używam "Dev C++". Wiecie w takim razie jak mógłbym uzyskać te znaki IPA lub z jakiego powodu znak ASCII o numerze 137 jest inaczej wyświetlany w konsoli? Ewentualnie program mógłby nie wyświetlać tego w konsoli tylko zapisywać do pliku i zaraz zobaczę, czy jak zapisze to do pliku to też będą problemy z innym wyświetlaniem.

  2. Drugi problem, a właściwie pytanie, bo w najprostszej wersji program ma po prostu czekać na podanie wyrazu po angielsku w konsoli, następnie odszukiwać w bazie słów ten wyraz, czyścić konsolę i wyświetlać pisownię tego wyrazu w alfabecie fonetycznym, czyli tak:

Kopiuj
#include <iostream>
using namespace std;

int main() {
	string tekst;
        cin >> tekst;
        system("cls");
if (tekst=="previous")
{
       cout<<"pri:viəs";
}
else if(tekst==...)
{
	cout<<"...";
}
// itd. dla innych wyrazów
	
    return 0;
}

i powiedzmy, że no będę po prostu rozszerzał samemu tą bazę poprzez manualne wklepywanie (co oczywiście i tak jest nieuniknione, ale dzięki temu pewnie trochę zapamiętam) tj. przepisywanie z diki, wpisywanie kolejnego else if'a i kompilację i powstanie takich if/else if setki/tysiące to raczej działanie tego programu nie będzie zbyt szybkie? A więc macie pomysł jak zrealizować to w inny sposób?

PS: A docelowo program ma działać tak, że ja kopiuję tekst z ebook'a powiedzmy, że jest to aplikacja desktopowa, więc klikam w button'a konwertuj i po prostu program bierze sobie kolejne wyrazy z okienka z tym tekstem tj. czyta kolejne litery gdy jest spacja lub . kopiuje to do bufora, żeby utworzyć wyraz, przeszukuje tą bazę i zamienia na IPA tak długo aż zamieni cały tekst i wyświetla go w innym oknie.


@Edit

Ogólnie sprawa wygląda teraz tak, jak pisałem zamieniłem wyświetlanie w konsoli na zapisywanie do pliku, a więc taki kod:

Kopiuj
#include <iostream>
#include <fstream>
using namespace std;
int main() {
    std::string tekst;	
    cin >> tekst;
    system("cls");
    fstream plik( "plik.txt", ios::out );
   if( plik.good() == true )
    {
        if(tekst=="previous")
        {
        	plik<<"previous ə ë";
		}
        plik.close();
    }	
    return 0;
}

I w pliku wynikowym, a właściwie już w samym edytorze zamiast ə jest ?, a ë wyświetla się prawidłowo w pliku jako ë. I jak skopiuję ə bezpośrednio do pliku to nie ma problemu z jego wyświetlaniem, a więc istniałaby możliwość żeby w pliku wynikowym wyświetlały się znaki alfabetu IPA, ale nie wiem jak wprowadzić je do edytora Dev C++, bo z każdą próbą skopiowania np. tego ə pojawia się znak zapytania w wyniku czego w pliku też jest znak zapytania.

enedil
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1028
0

Upewnij się, że kodowanie pliku .cpp to utf-8.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

Znaczki w windowsowej konsoli to ogólnie trudny temat. Nie może być GUI?

z tego powodu chciałem zastąpić poszczególne znaki z IPA po prostu jakimiś szczególnymi/charakterystycznymi/podobnymi znakami

https://en.wikipedia.org/wiki/Kirshenbaum

AndkowyUczeń
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0
Azarien napisał(a):

Znaczki w windowsowej konsoli to ogólnie trudny temat. Nie może być GUI?

z tego powodu chciałem zastąpić poszczególne znaki z IPA po prostu jakimiś szczególnymi/charakterystycznymi/podobnymi znakami

https://en.wikipedia.org/wiki/Kirshenbaum

zrobiłem bez GUI jak dotąd wczytuje z pliku tekst, który chce zamienić i zapisuję w innym pliku skorzystałem z tego http://www.antimoon.com/resources/phonchart2008.pdf, rano albo za godzinę jak mi się zechce jeszcze wklepywać fonetyczne wersje to pokażę swoje wypociny :D a jutro może spróbuję z GUI żeby normalne znaki IPA były (jak pobiorę Visuala)

Także za niedługo dam "edita".


@Edit

Takie coś wymęczyłem, to moje wypociny :) -> http://www.wklej.org/id/3220489/

A to działanie: title

Uwagi:

  1. No cóż te dodawanie tych wersji fonetycznych jest dość uciążliwe, bo trzeba wpisać całą linijkę dla każdego wyrazu -> else if(tekst=="...") wynik="..."; , a nawet przy kopiowaniu trzeba sobie dwa razy kursorem najechać, więc trochę to czasu zajmuje, chociaż sam aspekt wpisywania słów do słownika diki i przepisywania jest dobry, bo za każdym razem i tak odtwarza się wymowa lektora, słówko mogę zawsze dodać na swoje konto na diki do powtórek, ale trwa to zbyt długo i z tego powodu dopiszę to, żeby dodatkowo tworzył jeszcze jeden plik, w którym będą same else if'y do mojej bazy, żebym nie musiał ich kopiować, bo do każdego pojedyńczego słówka z tekstu mam dostęp, więc wystarczy out_2<<"else if("<<bufor<<") "<<"wynik=" ... ";" \n
    i powinno działać, a zaoszczędzę sobie czasu i tylko będę musiał wpisywać słówka do diki i przepisywać do wyniku wersję fonetyczną.

  2. No ogólnie przydałyby się jednak te znaki IPA, a nie zastępowanie ich normalnymi ASCII, dlatego jak mi się zachce pobrać Visual'a to spróbuję z GUI albo spróbuję pobrać coś innego niż Dev C++, może jakoś w notatniku to skompilować bez żadnego IDE, bo ogólnie no w pliku wynikowym mogą pojawiać się znaki fonetyczne z alfabetu, tyle, że ten edytor Dev C++ nie przyjmuje tego i zamienia to na znaki zapytania.

  3. I ogólnie przydałoby mi się jeszcze gdybym wiedział ile jest unikatowych słów w tekście, który przesłuchuję/przerabiam, ale to chyba nie będzie takie trudne, żeby to dodać, bo wystarczy po prostu w takiej sytuacji, przy każdym wyszukaniu danego słowa z mojej bazy dodawać sobie jedynkę do jakiegoś int'a, a przy kolejnym wyszukaniu/wywołaniu tego słowa po prostu blokować to flagą, więc raczej dziś to zrobię.

  4. Ogólnie program działa wystarczająco szybko jak na jak do tej pory około 100 if'ów, wkleiłem tekst z około 2000 słów to wykonał się w mniej niż sekundę.

PS: Jakieś uwagi/inne pomysły realizacji każdą z pokorą przyjmę.

enedil
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1028
0

Użyj mocy Luke! Tfu, znaczy: użyj mapy.

#include <map>
std::map<std:string, std::string> fonetycznie;
fonetycznie["wyraz"] = "zapis";
...
std::cout << fonetycznie["wyraz"];
AndkowyUczeń
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0

Ok dzięki za pomoc udało mi się uzyskać to co chciałem. Pobrałem sobie Code:Blocks i tam bez problemu mogłem do edytora wklepywać znaki fonetyczne IPA w odróżnieniu od Dev C++, poza tym i tak zautomatyzowałem uzupełnianie bazy z postacią fonetyczną, przez co else if'y generują się same odczytując postać fonetyczną z pliku.

Teraz program generuje pliki:
-> z przekonwertowanym tekstem na postać fonetyczną IPA
-> z listą unikatowych słówek z całego tekstu przy których w nawiasie jest liczba wystąpień/powtórzeń danego słowa w całym tekście oraz postać fonetyczna obok
-> samą listę unikatowych słówek linia po linii
-> program na podstawie tej listy unikatowych słówek wstawia je do bazy generując plik wyjściowy postaci

Kopiuj
else if(tekst=="...") wynik="...";

gdzie w miejsce tekst słówka pochodzą właśnie z listy unikatowych słówek, a w wynik z odczytywanego pliku, w którym po prostu samemu wpisuje postać fonetyczną przepisaną z diki lub jakiegoś słownika, przez co nie muszę już kopiować każdego słowa

Tak to wygląda:

title

PS: Jak już poznam trochę Androida to spróbuję go przepisać i uzupełnić o np. dodawanie tych unikatowych słówek automatycznie do powtórek z diki lub coś innego, lub po prostu w takiej postaci jak jest, przynajmniej nie będzie to sucha nauka technologii tylko pisanie jakiegoś tam prostego projektu :D

enedil
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1028
1

Widze jeszcze jeden problem - istnieją słowa, które się pisze tak samo, ale wymawia różnie. Bardzo często jest to problem typu rzeczownik i czasownik tak samo się zapisuje, ale wymowa już jest różna.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.