Я разрабатываю систему для определения человеческого языка данного текста. Он работает, сохраняя словарь для каждого интересующего языка и затем оценивая, соответствует ли вход пользователя любым словам, хранящимся в словаре. Победителем является язык, словарь которого имеет наибольшее количество хитов.обеспечить стандартизацию кодирования для ввода пользователем и ввода-чтения файлов
Я думаю, что для того, чтобы эти две записи, слова пользователя и слово, которое приходит из файла «списокслово», чтобы соответствовать кодировке должны быть такими же, это то, что я пытаюсь исправить.
Я взял список слов от this site.
Когда я использую те из «ASCII» в моем коде все работает, но когда я использую те из «Unicode» ничего не работает.
Это смущает меня, потому что я не хочу, чтобы программа получала некоторый ввод, который был закодирован не таким образом (таким образом, что конфликтует с моими структурами списка слов), а затем сбой.
По этой причине я хочу стандартизировать все входные данные с определенной кодировкой. Я думал, что «Unicode« было бы лучше, потому что, поскольку это система для определения естественного языка текста, я мог бы получить некоторые греческие или русские или китайские символы, и из моего понимания »ASCII« очень не -standardized.
В настоящее время я использую консоль Eclipse для ввода ввода.
Это, как я прочитал в файлах:
//BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(dir.toString()), "UTF-8"));
BufferedReader br = new BufferedReader(new FileReader(dir.toString()));
String line = null;
BloomFilter<String> bloomFilter;
if (word_holding_directory_path.toLowerCase().contains("/de/"))
{
bloomFilter = de_bloomFilter;
}
Это, как я прочитал на входе пользователя:
//Scanner in = new Scanner(System.in , "UTF-8");
Scanner in = new Scanner(System.in);
System.out.println("Please enter a sentence: ");
String[] input_text = in.nextLine().split("\\s");
Как вы можете видеть, я пытался заставить кодировку быть UTF- 8, (это то же самое, что и Unicode, не так ли?), Но поскольку он не работал, я прокомментировал это.
Это, как я сравниваю слова:
for (String word : input_text)
{
String normalized = word.trim().toLowerCase();
if (words.contains(normalized))
{
++count;
}
}
Полная программа here on github это довольно короткий и довольно явно прокомментировал.
Один из подходов, который я видел в идентификации языка n-граммов, - это иметь по одной модели для каждой пары язык/кодирование. Итак, одна модель для русско-UTF8, другая для русско-UTF16LE, другая для русского-KOI8R. Конечно, если у вас очень большие модели, сохранение одного в Юникоде и получение других на лету, вероятно, лучше. – tripleee
Юникод и UTF-8 - это ** не ** то же самое. Unicode представляет собой абстрактное кодирование, которое может быть реализовано как UTF-8, UTF-16, UTF-32 и множество других кодировок; хотя обычно UTF-8 является дефолтом в эти дни. – tripleee
Что вы должны исправить, так это то, как вы читаете файл, а не то, как вы читаете System.in. –