• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Frekwencja liter w językach - problem z polskimi znakami i nie tylko

+1 głos
703 wizyt
pytanie zadane 2 marca 2016 w JavaScript przez Rubeus024 Obywatel (1,680 p.)

Witam wszystkich,

Niedawno natrafiłem na sposób, który pozwala na rozszyfrowanie, z jakim językiem mamy do czynienia. Wystarczy znać procentowy rozkład liter dużego tekstu, by móc przypuścić, z czym mamy do czynienia. Więcej pod tym linkiem: https://en.wikipedia.org/wiki/Letter_frequency

Zająłem się tym i na razie program zlicza litery tylko z tablicy ascii, co "trochę" zawęża zabawę. Czy da radę rozszerzyć zliczanie poszczególnych liter na cały zestaw znaków z unicode? Wszystkie pomysły są ważne, poniżej wstawiam mój kod:

<!DOCTYPE HTML>
<html lang="pl">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Stronka</title>
</head>
<body>
	<script type="text/javascript" >
	
	var suma = 0; // zliczanie liter
	var tekst=prompt("Napisz/skopiuj tekst w celu przeanalizowania liczby poszczególnych liter)").toLowerCase(); // pytanie z prośbą o przekazanioe tekstu.
	var tablica_ascii= ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t","u", "v", "w", "x", "y", "z"]//tablica z ascii a- 97 z - 122
	var tablica_wynik= new Array(26) // tablica zliczająca wszystkie napotkane litery

	for(i=0 ; i<tablica_wynik.length ; i++){
		tablica_wynik[i]=0; // zerowanie tablicy
	}
	

	for(var i=0 ; i<tekst.length; i++){ 
		for(var j=0 ; j<tablica_ascii.length ; j++ ){
			if( tablica_ascii[j] == tekst.charAt(i) ){
				tablica_wynik[j]++;
				suma++;
			}
			
		}
	}
	//Opublikowanie wyniku:
	document.write("Oto liczba poszczególnych liter w tekście: <br>" );
	for(var i=0 ; i<tablica_wynik.length ; i++){
		document.write(tablica_ascii[i],":  ", tablica_wynik[i],". Procentowy udział litery ", tablica_ascii[i]," w tekście: ", (Math.round( (tablica_wynik[i]/suma)*1000 )/10),"%." ,"<br>" );
	}
	document.write(" Wszystkich liter w tekscie jest: ",suma,".");

	</script>
</body>
</html>

 

1 odpowiedź

+1 głos
odpowiedź 2 marca 2016 przez Comandeer Guru (607,060 p.)
wybrane 2 marca 2016 przez Rubeus024
 
Najlepsza
A spróbuj po prostu dopisać polskie literki do tej tablicy.
komentarz 2 marca 2016 przez Rubeus024 Obywatel (1,680 p.)
Dzięki wielkie! A istnieje prosta możliwość rozszerzenia zastosowania na wiele innych języków inną drogą niż dodanie znaków do tablicy?
komentarz 2 marca 2016 przez Comandeer Guru (607,060 p.)

Tak, stworzenie tablicy znaków na podstawie analizowanego stringa ;) Po prostu.

Czyli lecisz po każdym znaku i robisz coś typu:

if ( typeof chars[ currentChar ] === 'undefined' ) {
    chars[ currentChar ] = 1;
} else {
    chars[ currentChar ]++;
}

 

Podobne pytania

0 głosów
0 odpowiedzi 169 wizyt
pytanie zadane 8 kwietnia 2019 w PHP przez rafal.budzis Szeryf (85,700 p.)
0 głosów
1 odpowiedź 289 wizyt
pytanie zadane 3 września 2018 w PHP przez czujek22 Dyskutant (7,670 p.)
0 głosów
0 odpowiedzi 180 wizyt

93,425 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,785 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...