2015-11-24 3 views
1

Я пытаюсь сравнить 2 файла, из которых один - обычный текст (не английский), а другой - глоссарий в паре значений ключа. Они выглядят примерно так:Сравнение 2 текстовых файлов разных локалей в java

Японский Текстовый файл:

わたしのなまえはしんです。 
ソフトウェアインギネアとしてはたらいています. 

En-Jp свойства файла:

as:と 
software:ソフトウェア 
me:わたしを 
name:なまえ 
I:わたしは 
working:はたらいています。 
... 

Я пытаюсь сравнить эти 2 файла контента мудрое с ниже код:

 Scanner kb = new Scanner(System.in); 
     String localtext; 
     String glossarytext; 
     File dictionary = new File("./src/main/resources/ZN_EN_Test.txt"); 
     Scanner dictScanner = new Scanner(dictionary); 
     File list = new File("./src/main/resources/ZN_JP_Test.txt"); 
     try 
     { 
      while(dictScanner.hasNextLine()){ 

      glossarytext=dictScanner.nextLine(); 

       try (Scanner listScanner = new Scanner(list);){ 
        while(listScanner.hasNextLine()){ 
         localtext=listScanner.nextLine(); 

         if(glossarytext.contains(localtext)) 
         System.out.println(localtext); 

        } 
       } 
      } 

     } catch(NoSuchElementException e) { 
      e.printStackTrace(); 
    } 

Проблема здесь, так как в японском тексте нет места между двумя словами, сканер, похоже, не прошел contains. Та же программа работает успешно, если я организую слова что-то вроде ниже:

わたしの 
なまえ 
は 
しん 
です。 

Как я должен сделать его работу, чтобы найти соответствие содержимого без форматирования японского текстового файла.

ответ

1

Я пытаюсь переформулировать вопрос: у вас есть простой текст без разделителя и словарь (возможно больше слов в словаре, чем в тексте?), И вы хотите знать, является ли простой текст конкатенацией словаря слова - true или false -.

Сканер больше предназначен для работы с разделителем. И у вас их нет.

Лучше использовать Matcher.

1 Тогда вы должны построить регулярное выражение, со всеми словарных слов (word1 | word2 | word3 | ....) *

2 и вы подходите

Если у вас слишком много слов в словаре, увидеть это: Java : does regex pattern matcher have a size limit?

есть также ссылки на алгоритм Ахо-Corasick

Примечание 1: если вы хотите, чтобы получить разложение, увидеть это: Create array of regex matches

Примечание 2: ответ может быть неоднозначным, зависит от ваших слов (если у вас в вашем словаре есть AA, BB и AABB - я не знаю японский язык).

Надеюсь, что это поможет

+0

Большое спасибо за подробное объяснение. «Матчи» полезны, так как я хочу только увидеть, существует ли конкретный шаблон или нет. Я действительно не хочу извлекать согласованный шаблон. Но все вышеупомянутые замечания и ссылки действительно полезны. – MKay

Смежные вопросы