比较java中不同语言环境的2个文本文件

时间:2015-11-24 11:45:36

标签: java file

我试图比较两个文件,其中一个是纯文本(非英语),另一个是键值对中的词汇表。它们看起来与此相似:

日文文件:

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

En-Jp属性文件:

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

我正在尝试将这两个文件内容与下面的代码进行比较:

        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();
    }

问题在于,由于日文文本在2个单词之间没有空格,因此扫描仪似乎无法通过contains条件。如果我安排下面的单词,那么同样的程序会成功运行:

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

如何在不格式化日文文本的情况下找到匹配的内容。

1 个答案:

答案 0 :(得分:1)

我尝试重新提出这个问题:你有一个没有分隔符的纯文本和一个字典(字典中的单词可能多于文本中的单词?),你想知道纯文本是否是字典单词的串联 - 真或假 - 。

扫描仪更适合使用分隔符。你没有。

更好地使用Matcher。

1然后你必须用你的所有词典单词构建一个正则表达式(word1 | word2 | word3 | ....)*

2,你匹配

如果词典中的单词太多,请参阅:Java : does regex pattern matcher have a size limit?

还有Aho-Corasick算法的链接

备注1:如果您想获得分解,请参阅: Create array of regex matches

备注2:答案可能含糊不清,取决于你的话语(如果你的词典中有AA,BB和AABB - 我不懂日语)。

希望这有帮助