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

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

新規登録して質問してみよう
ただいま回答率
85.50%
String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

4回答

1741閲覧

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

ogatatti

総合スコア6

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/05/18 11:54

(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%に満たない状況であり、手分類した中に重複パターンが後から見つかったりと、
手に負えなくなってしまい、お知恵を拝借させてください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2019/05/18 13:14

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

2019/05/19 02:48

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

回答4

0

自己解決

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

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

投稿2019/05/21 15:55

ogatatti

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

投稿2019/05/19 06:16

KojiDoi

総合スコア13669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ogatatti

2019/05/19 16:23

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

0

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

投稿2019/05/18 14:45

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ogatatti

2019/05/19 02:49

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

0

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

投稿2019/05/18 14:25

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ogatatti

2019/05/19 02:51

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

2019/05/19 05:36 編集

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

2019/05/19 16:24

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問