我试图比较其中的两个文件,一个是纯文本(非英语),另一个是键值对中的词汇表。它们看起来像这样:
日语文本文件:
わたしのなまえはしんです。
ソフトウェアインギネアとしてはたらいています.
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——我不懂日语)。
希望这能帮助