recherche

Maison  >  Questions et réponses  >  le corps du texte

正则表达式 - Java 读取txt格式语料库并匹配指定字符串,如何可以快速完成?

有一个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();
            }
迷茫迷茫2856 Il y a quelques jours770

répondre à tous(4)je répondrai

  • ringa_lee

    ringa_lee2017-04-17 17:52:07

    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

    .

    répondre
    0
  • 高洛峰

    高洛峰2017-04-17 17:52:07

    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é.

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-17 17:52:07

    nio multithreading

    répondre
    0
  • 怪我咯

    怪我咯2017-04-17 17:52:07

    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

    répondre
    0
  • Annulerrépondre