正则表达式 - Java 读取txt格式语料库并匹配指定字符串,如何可以快速完成?
迷茫
迷茫 2017-04-17 17:50:07
0
4
781

有一个9M多行的语料库,文件大小4G。现在需要匹配指定动词,符合句子条件的输出。
但是文件过大。每次读取一行。匹配下来要好久。请问有没有什么方法可以加快处理速度。

BufferedReader cpreader = new BufferedReader(new InputStreamReader(new FileInputStream(this.getCorpusPath())));
tring line = cpreader.readLine();
while(line != null)
            {
                ArrayList<String> verbList = new ArrayList();
                matcher_line = Pattern.compile("(.*\\%\\&\\$cook\\%\\&\\$VB.*)").matcher(line);
                if(matcher_line.find())
                {
                    System.out.println(line);
                }
                
                
                
                line = cpreader.readLine();
            }
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

répondre à tous(4)
左手右手慢动作

Il ne devrait y avoir aucun problème pour lire les fichiers, mais vous pouvez essayer de passer en lecture tampon, car la taille d'une ligne peut être incertaine, ce qui affectera l'efficacité. .
Si la correspondance est un seul mot, vous pouvez utiliser une meilleure méthode de correspondance. Je ne sais pas si elle est régulière

.
小葫芦

Votre programme est traité par lignes. Le traitement monothread est définitivement lent. Utilisez un traitement multithread. Après le traitement, la ligne suivante doit être traitée. utilisez le cache pour lire plusieurs lignes, puis allouez-le à plusieurs threads pour le traitement, afin que le processeur puisse être maximisé.

Ty80

nio multithreading

刘奇
Pattern.compile("(.*\%\&\$cook\%\&\$VB.*)")

C'est à l'intérieur de la boucle, et l'expression régulière doit être compilée à chaque fois, donc c'est très lent. Vous pouvez la mettre en dehors du while et y jeter un œil

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal