Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 扫描大量文档以查找数十个单词_Java_Regex_Algorithm_Matching_String Matching - Fatal编程技术网

Java 扫描大量文档以查找数十个单词

Java 扫描大量文档以查找数十个单词,java,regex,algorithm,matching,string-matching,Java,Regex,Algorithm,Matching,String Matching,我有大量的文档(超过一百万),我需要定期扫描并匹配大约100个“多词关键字”(即不仅仅是像“电影”这样的关键字,还有“北美”)。我有以下代码,可以很好地处理单词关键字(即“book”): /** *扫描文本中的某些关键字 *@param keywords我们正在搜索的关键字列表 *@param text我们将扫描的文本 *@返回我们在文本中可以找到的列表中任何关键字的列表 */ 公共静态列表扫描词(列表关键字、字符串文本){ //准备分解迭代器 BreakIterator wb=BreakIte

我有大量的文档(超过一百万),我需要定期扫描并匹配大约100个“多词关键字”(即不仅仅是像“电影”这样的关键字,还有“北美”)。我有以下代码,可以很好地处理单词关键字(即“book”):

/**
*扫描文本中的某些关键字
*@param keywords我们正在搜索的关键字列表
*@param text我们将扫描的文本
*@返回我们在文本中可以找到的列表中任何关键字的列表
*/
公共静态列表扫描词(列表关键字、字符串文本){
//准备分解迭代器
BreakIterator wb=BreakIterator.getWordInstance();
wb.setText(文本);
列表结果=新建ArrayList();
//逐字迭代
int start=wb.first();
for(int end=wb.next();end!=BreakIterator.DONE;start=end,end=wb.next()){
字符串字=文本。子字符串(开始、结束);
if(!StringUtils.isEmpty(word)和&keywords.contains(word)){
//我们的关键字中有这个词,所以请返回它
结果:添加(word);
}
}
返回结果;
}
注意:我需要这段代码尽可能高效,因为文档的数量非常大


我当前的代码找不到这两个关键字中的任何一个。你知道怎么修理吗?我也可以使用完全不同的方法。

扫描每一个文档根本无法缩放。最好将您的文档编入索引
或者像在评论中一样使用Lucene。

我相信创建一个
Scanner
的实例可以解决这个问题。
Scanner
类有一个方法,允许您在文本中搜索一个模式,该模式就是您案例中的单词

Scanner scanner=new Scanner(text);
while(scanner.hasNext()){
    scanner.findInLine(String pattern);
    scanner.next();
}

Scanner
类很适合做这样的事情,我相信它可以很好地满足您的需要。

为什么不尝试这样的任务呢?是的,使用一个索引系统来维护文件可能会更好。顺便说一句,你需要一百万个文本文件,哪种文本?如果每个包含10个单词,那就是1000万个单词。假设I/o只是用来打开/关闭它们,我只需要在数据库中存储找到的关键字。索引不是解决方案。文档集是否会随着时间的推移而改变,关键字集是否会改变,或者两者都会改变?我正在为文档中的关键字建立索引。现有文档基本上保留相同的关键字。新文档将定期添加。索引不适合我的任务。核心问题是他必须在每个文档中搜索许多不同的关键字/短语。你是否建议他重新设置扫描仪,并在整个文档中搜索每个图案一次?在你尝试之前你不可能真正知道,但如果它表现得足够好,我会非常惊讶。你在用这个
findInLine()
调用做什么?那对我来说毫无意义。
Scanner scanner=new Scanner(text);
while(scanner.hasNext()){
    scanner.findInLine(String pattern);
    scanner.next();
}