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



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

日语文本文件:

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

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

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

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

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

我试图重新表述这个问题:你有一个没有分隔符的纯文本和一个字典(字典中的单词可能比文本中的单词多?),你想知道纯文本是字典单词的拼接——是真是假。

扫描仪更倾向于使用分隔符。而你没有。

最好使用Matcher。

1然后,您必须使用字典中的所有单词(word1|word2|word3|…)*构建一个正则表达式

2并且你匹配

如果字典中的单词太多,请参阅以下内容:Java:regex模式匹配器有大小限制吗?

还有一个链接到Aho–Corasick算法

备注1:如果你想得到分解,请参见:创建匹配的正则表达式数组

备注2:答案可能模棱两可,取决于你的单词(如果你的字典里有AA、BB和AABB——我不懂日语)。

希望这能帮助

最新更新