我试图比较两个文件,其中一个是纯文本(非英语),另一个是键值对中的词汇表。它们看起来与此相似:
日文文件:
わたしのなまえはしんです。
ソフトウェアインギネアとしてはたらいています.
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
条件。如果我安排下面的单词,那么同样的程序会成功运行:
わたしの
なまえ
は
しん
です。
如何在不格式化日文文本的情况下找到匹配的内容。
答案 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 - 我不懂日语)。
希望这有帮助