1

XML文字列があります

<tags>
   <person1>dave jones</person1>
   <person2>ron matthews</person2>
   <person3>sally van heerden</person3>
   <place>tygervalley</place>
   <ocassion>shopping</ocassion>
</tags>

「SallyVanHeerden」や「Tygervalley」などの検索用語を使用してこのxml文字列を検索したいと思います

この文字列内の用語を見つけるために正規表現を使用する方が速いですか、それともPythonのfind()メソッドは十分に速いですか?Pythonの要素ツリーXMLパーサーを使用して検索し、XMLツリーを構築して検索することもできますが、速度が遅くなるのではないかと心配しています。

上記の3つのうちどれが最速ですか?また、他の提案はありますか?

複数の検索語が入力される可能性があり、複数(数千)のXML文字列も検索されることに注意してください。

更新:xml文字列をリストに分割し、すべての特殊文字を削除してから、リストをセットおよび検索語のセットに変換するのはどうでしょうか。次に、2つのセットの共通部分を取得しますか?これは速いでしょうか?

4

2 に答える 2

1

正規表現は、コンパイルしてから、複雑なルールのセットに従って文字列を検索するという長いプロセスを経ます。関数は1回のfindパスで文字列を通過します。

このfind関数は、パターンが必要ない場合にパフォーマンスを向上させます。

于 2012-05-17T21:10:08.727 に答える
1

正直なところ、これがボトルネックになるには、非常に極端な速度要件が必要になると思いますが、たとえそうだとしても、これについて十分な情報に基づいて決定できる唯一の方法は、テストすることです。

findこれが開始です。/を使用してその文字列を検索しre.findall、1つの文字列を検索します。これがあなたのユースケースを代表しているとは思えませんが、実行するクエリを決定し、それらをテストする必要があります。

% python -mtimeit "'<tags> <person1>dave jones</person1> <person2>ron matthews</person2> <person3>sally van heerden</person3> <place>tygervalley</place> <ocassion>shopping</ocassion> </tags>'.find('tygervalley')"
1000000 loops, best of 3: 0.279 usec per loop

% python -mtimeit "import re; re.findall('tygervalley', '<tags> <person1>dave jones</person1> <person2>ron matthews</person2> <person3>sally van heerden</person3> <place>tygervalley</place> <ocassion>shopping</ocassion> </tags>')"
100000 loops, best of 3: 2.65 usec per loop

私が言ったように、この違いがあなたのプログラムで最も重要なボトルネックであることを想像するのは難しいです。

于 2012-05-17T23:15:38.027 に答える