質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.78%

大量ログの中から、定形文字列を抽出したい。

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 684

ogatatti

score 6

(1) 実現したいこと
文章自体は、形態素解析(Mecab)等を使って分割できたのですが、その後で、定形文字列の
パターン抽出をしたい

(2) 発生している問題
分解した文字列の中に、定形文があることは目視で確認できますが、可変情報が多く
ノイズも混ざっていて、なおかつ量が膨大なため、手分類が厳しい。
定型文のパターンは、目立つものはあるが、目立たないものも混在していて、
どういうパターンが存在するかわからない

(3) 試したこと
形態素解析の文字列でGoogle検索してみましたが、解決できませんでした。
2つの文字列を比較する方法は
https://teratail.com/questions/54058
の方法を試してみたのですが、大量の情報から、いくつ類似パターンが存在するか
不明な状況で、パターンを抽出するアイデアが思い浮かびませんでした。

(4) 環境
環境はPython3.6を使っています。

(5) 詳細
現在サーバのログを調査しているのですが、下記のような文字列を

AAAはBBBに成功しましった'
CCCはDDDでエラーが発生し  のプロセスが強制終了しました
EEEはFFFに成功しましった'
GGGとHHHは依存関係があるため、NNNを先に終了させてください
IIIはJJJに成功しましった'
KKKとLLLは依存関係があるため、MMMを先に終了させてください
2019年5月15日00時00分00秒 にイベントが発生しました
2019年5月17日10時00分00秒 にイベントが発生しました
2019年5月18日20時00分00秒 にイベントが発生しました。(問題が発生した場合は、RRRに連絡してください。)
OOOとPPPは依存関係があるため、QQQを先に終了させてください
・・・

[['は','に成功しましった'],
['は','でエラーが発生し','のプロセスが強制終了しました'],
['と','は依存関係があるため、','を先に終了させてください'],
['にイベントが発生しました']]
というようにパターン抽出させたいのですが、うまい方法または、アルゴリズムをご存知の方はいらっしゃらないでしょうか。

ログなので、時刻やプロセス等が可変なだけで、出てくる文字列は定形化されていると思い、
手で分類しようと試みたのですが、定形文章の中に()文字列が入ったり、パターンが100パターン作っても
全体のログの10%に満たない状況であり、手分類した中に重複パターンが後から見つかったりと、
手に負えなくなってしまい、お知恵を拝借させてください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • coco_bauer

    2019/05/18 22:14

    どのようなものを定型文と認識していらっしゃいますか? 「可変情報が多く
    ノイズも混ざって」というような文は、定型から外れているという事だと思うのですが。

    キャンセル

  • ogatatti

    2019/05/19 11:48

    回答ありがとうございます。
    ここでいうところの定型文というのは
    [['は','に成功しましった'],
    ['は','でエラーが発生し','のプロセスが強制終了しました'],
    ['と','は依存関係があるため、','を先に終了させてください'],
    ['にイベントが発生しました']]
    という意味で使っておりました。
    ノイズというのは、
    2019年5月17日10時00分00秒 にイベントが発生しました
    2019年5月18日20時00分00秒 にイベントが発生しました。(問題が発生した場合は、RRRに連絡してください。)
    等、定型文以外にいろいろなコメントが追加されることを指しております。

    キャンセル

回答 4

check解決した方法

0

下記で対応しました。
1.単語ごとに分割し、リストに格納
2.単語の出現回数をカウント
3.出現頻度の少ない単語を除外
4.1.に格納したリストに含まれる文章を抽出
残りは、力技で、定形文字列を抽出。

最終的には手作業と力技で対応しました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

prefixspanのような系列パターンマイニング系の手法でやると良いのではないでしょうか。アルゴリズムと実装はそれぞれたくさんあると思うので、目的に合っていそうなものを探してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/19 11:51

    回答ありがとうございます。
    やっぱり機械学習系の方法が必要なりますか。
    パターンマイニングで検索はしてみましたが、難しい解説ばかりなので、キーワードをご存知でしたら教えていただけないでしょうか。

    キャンセル

  • 2019/05/19 14:36 編集

    回答に書いたprefixspanや系列パターンマイニングがそれです(パターンマイニングと系列パターンマイニングは同一ではないので注意が必要です)。

    キャンセル

  • 2019/05/20 01:24

    ありがとうございます。
    prefixspanで調べたのですが、少し難しかったので、改めて質問させていただいてしまいました。
    真剣に読み込んでみます。

    キャンセル

0

網羅性を考えるなら、ログを作ってる側のテンプレート確認したほうが確実で早いのでは?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/19 11:49

    回答有り難うございます。
    ログ自体はOSが出すものもあるため、造り手にすべてを確認するのは難しいです。
    そのため、パターンを作り、過去に出たことがなければ随時追加しようと思っています

    キャンセル

0

最終的に何をしたいのかわかりませんが、「定形文字列のパターン抽出」なら正規表現によるパターンマッチングが一番素直ではないでしょうか。

パターンマッチングは、パターンに合致している文字列が存在すれば成功なので、「定形文章の中に()文字列が入ったり」は問題になりません。もとがサーバーのログなら、マッチを試みるべき正規表現の数は相当絞り込めるはずです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/20 01:23

    > 「定形文字列のパターン抽出」なら正規表現によるパターンマッチングが一番素直ではないでしょうか。

    はい。
    ただ、パターンマッチングさせるキーワードの抽出ができずにいます。
    例に挙げた
    [['は','に成功しましった'],
    ['は','でエラーが発生し','のプロセスが強制終了しました'],
    ['と','は依存関係があるため、','を先に終了させてください'],
    ['にイベントが発生しました']]
    は一例で、母数がどれだけあるか、不明ですので、まずは定形文字列としてどういうものがあるかを抽出し、それができたら、その文字列にマッチングしたのが何件あるか調べたいと思っています。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る