0

私たちは、ウェブサイトでユーザー エージェント文字列を追跡しています。それらについて統計を取り、IE6 ユーザーが何人いるか (何を対象に開発する必要があるかがわかります)、またモバイル ユーザーが何人いるかを確認したいと思います。

したがって、次のようなログ全体があります。

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; FunWebProducts)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; FunWebProducts; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0; .NET CLR 2.0.50727)

そして理想的には、すべての「意味のある」文字列を表示するのは非常にきれいです。これは、特定の長さよりも長い文字列を意味するだけです。たとえばFunWebProducts、または.NET CLR、または.NET CLR 1.0.3705-- が含まれているエントリの数を確認したい場合がありますが、セミコロンが含まれているエントリの数は確認したくありません。したがって、必ずしも一意の文字列を探しているわけではありませんが、すべての文字列、さらにはサブセットも探しています。Mozillaしたがって、これには と のカウントが含まれていることがわかっているので、すべての のカウントを確認したいと思いMozilla/5.0ますMozilla/4.0。このためのネストされた表示があり、最短の文字列から開始して下に向かっていくとよいでしょう。おそらく次のようなもの

4,2093 Mozilla
 1,093 Mozilla/5.0
    468 Mozilla/5.0 (Windows;
     47 Mozilla/5.0 (Windows; U 
 2,398 Mozilla/4.0

これはコンピュータ サイエンスの宿題のように思えます。これは何と呼ばれるでしょうか?このようなものはそこに存在しますか、それとも私が独自に作成しますか?

4

3 に答える 3

1

最長の共通部分文字列の問題、または上記の特定の例を考えると、trieでアプローチできる最長の共通プレフィックスの問題を見ています。

ただし、上記の例からすると、おそらくこれについて効率的である必要さえありません。代わりに、次のようにします。

  1. いくつかの句読点サブセットで文字列をトークン化します。[ ;/]

  2. 元の区切り文字を置き換えて、多くのトークンの一意のプレフィックスを保存します

  3. プレフィックスごとに、一致するレコードの数を取得して保存します

于 2012-09-28T01:50:36.257 に答える
0

メジャー名(オープニングパレンの前の部分)に分割し、各部分をセミコロンで区切って子レコードとして保存すると、必要な分析を行うことができます。たとえば、リレーショナルデータベースに保存します。

BrowserID   BrowserText
---------   -----------
1           Mozilla/4.0
2           Mozilla/5.0

FeatureID   FeatureText
---------   -----------
1           compatible
2           MSIE 7.0
3           Windows NT 5.1
4           FunWebProducts
5           .NET CLR 1.0.3705
6           .NET CLR 1.1.4322
7           Media Center PC 4.0
8           .NET CLR 2.0.50727

次に、ブラウザとパーツへの参照をログに記録すると、必要なタイプの分析を実行できます。

于 2009-12-22T18:39:29.800 に答える
0

正規表現を使用してユーザー エージェント文字列を関連するコンポーネント パーツに解析するのはどうでしょうか。ユーザー エージェント文字列の基本仕様は、' [name]/ [version]' または ' [name] [version]' です。その情報を使用して、正規表現 like([^\(\)\/\\;\n]+)([ ]((?=\d*\.+\d*|\d*_+\d*)[\d\.Xx_]+)|[/]([^\(\)\/; \n]+))を使用して、セットの最初の一致が で、セット[name]の 2 番目の一致が である一致セットを取得できます[version]。もちろん、スペースを/取り除き、セット内の 2 番目の一致から削除するか、後読みを使用するように正規表現を変更する必要があります (これは、いくつかの正規表現フレーバーがサポートしていないため、ここでは含めませんでした)。

これらすべてのタプルを取得したら、必要に応じてそれらを操作およびカウントできます。

于 2014-09-08T16:14:15.977 に答える