Thread Regexes: Geschwindigkeitsoptimierung (13 answers)
Opened by GoodFella at 2007-04-06 19:31

GoodFella
 2007-04-06 19:31
#75719 #75719
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
Mein Script schafft zu Zeit um die 120 Zeilen / Sekunde ->
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
            # Im VORNAMEN suchen:
            if (($ba_config{'search_prename'} == 1) and ($ba_config{'vorname_col'} <= $#top_headlines)) # zus.: Wenn Vorname und Nachname NICHT zusammen
             {
              #Titel + Vorname + Namensvorsatz:
              if ($ba_data{'vorname'} =~ /^\s*($search_pattern{'titel'})\s*(.*?)[ ]+($search_pattern{'name_vorsatz'})\s*$/sio)
               {
               
 ($ba_data{'titel'}, $ba_data{'vorname'}, $ba_data{'name_vorsatz'}) = ($1, $2, $3);
               
 push(@ba_info, 'Titel und Namensvorsatz im Vornamen');
               }
              #Titel + Vorname:
              elsif ($ba_data{'vorname'} =~ /^\s*($search_pattern{'titel'})\s*(.*)\s*$/sio)
               {
               
 ($ba_data{'titel'}, $ba_data{'vorname'}) = ($1, $2);
               
 push(@ba_info, 'Titel im Vornamen');
               }
              #Sekundärtitel + Vorname + Namensvorsatz:
              elsif ($ba_data{'vorname'} =~ /^\s*($search_pattern{'titel_secondary'})\s*(.*?)[ ]+($search_pattern{'name_vorsatz'})\s*$/sio)
               {
               
 ($ba_data{'titel_secondary'}, $ba_data{'vorname'}, $ba_data{'name_vorsatz'}) = ($1, $2, $3);
               
 push(@ba_info, 'Sekundärtitel und Namensvorsatz im Vornamen');
               }
              #Sekundärtitel + Vorname:   
              elsif ($ba_data{'vorname'} =~ /^\s*($search_pattern{'titel_secondary'})\s*(.*?)\s*$/sio)
               {
               
 ($ba_data{'titel_secondary'}, $ba_data{'vorname'}) = ($1, $2);
               
 push(@ba_info, 'Sekundärtitel im Vornamen');
               }

..füge ich jedoch dies hier noch mit ein:
Code (perl): (dl )
1
2
3
4
5
6
7
8
              #Vorname + Titel + Namensvorsatz:
              elsif ($ba_data{'vorname'} =~ /^\s*(.*?)[ ]+($search_pattern{'titel'})\s*$search_pattern{'name_vorsatz'}$/sio)
               {
               
 ($ba_data{'vorname'}, $ba_data{'titel'}, $ba_data{'name_vorsatz'}) = ($1, $2, $3);
               
 push(@ba_info, 'Namensvorsatz und Titel im Vornamen');
               }


reduziert sich die Geschwindigkeit auf 50 Zeilen / Sekunde.
Ich habe die Regexes vorher testweise rausgenommen, die Geschwindigkeit hatte sich beim Hinzufügen dieser um max. 5% vermindert; irgendwas an dem letzen Regex jedoch macht das Teil sehr lahm. Habe auch schon mit Benchmark rumgespielt, ohne Erfolg. Den Artikel hier http://www.ccl4.org/~nick/P/Fast_Enough/ habe ich auch schon durch.

Achja, %search_pattern enthält strings der Sorte 'von und zu|van|van den|van der' usw.

Jemand eine Idee, wie ich das schneller machen könnte?\n\n

<!--EDIT|GoodFella|1175873678-->

View full thread Regexes: Geschwindigkeitsoptimierung