さまざまな要素数の構造化テキスト文字列を効率的に解析する方法あけましておめでとう皆さん!
Kaggle からこのデータセットの調査を開始しました。 https://www.kaggle.com/chicago/chi-restaurant-inspections . 各行はレストランの検査で、違反のリストが 1 列あります。 ありがたいことに、違反は「|」で区切られています。 以下サンプル。 違反の数はさまざまです。
40. 冷蔵および金属ステム温度計が備え付けられていて目立ちます - コメント: 食品の温度を監視するためにステム温度計が必要でした。 提供および維持するように指示されています。 | | 41. 施設はゴミ、不要品、清掃用具が適切に保管されていない状態で維持されている - コメント: いくつかのアイテムが後部準備エリアの床から 6 インチ高くなっていなかったことが観察された。 昇格および維持する必要があります。 | | 38. 換気: 必要に応じて換気された部屋と機器: 配管: 設置および維持 - コメント: 後部キッチンの食品準備エリアの露出したハンド ハッシング シンクの排水が遅い。 修理および維持する必要があります。 | | 32. 食品および非食品と接触する表面は適切に設計、構築、維持されている - コメント: 地下室に錆びた食品貯蔵棚が観察された。 再塗装して維持する必要があります。 | | 34. 床: コードごとに構築され、清掃され、適切に修理され、コービングが取り付けられ、ほこりの少ない清掃方法が使用されました - コメント: 地下のパレットの下の床に汚れと破片が観察されました。 清掃して維持する必要があります。
構造を見る: ViolationID#. Violation_Type - コメント。 これらの文字列を ID#、Type、Comments に解析するには、次の 2 つの方法が考えられます。
1)Cols> Utilities> Text to Columns、次にTables> Stack、次に空白行を削除し、Word(text、delimiter)で新しい列を解析します
2) Words(Violations, "|") を使用して以下のようなリストを作成し、リスト内の各要素で作業します
{"40. 冷蔵および金属ステム温度計が提供され、目立ちます - コメント: 食品温度を監視するためにステム温度計が必要でした。 提供および維持するように指示されています。 "、" 41。 施設はゴミ、不要品、清掃用具が適切に保管されていない状態で維持されている - コメント: いくつかのアイテムが後部準備エリアの床から 6 インチ高くなっていなかったことが観察された。 昇格および維持する必要があります。 "、" 38。 換気: 必要に応じて換気された部屋と機器: 配管: 設置および維持 - コメント: 後部キッチンの食品準備エリアの露出したハンド ハッシング シンクの排水が遅い。 修理および保守が必要です。 "、" 32。 食品および非食品と接触する表面は適切に設計、構築、維持されている - コメント: 地下室に錆びた食品貯蔵棚が観察された。 再塗装して維持する必要があります。 "、" 34。 床: コードごとに構築され、清掃され、適切に修理され、コービングが取り付けられ、ほこりの少ない清掃方法が使用されました - コメント: 地下のパレットの下の床に汚れと破片が観察されました。 クリーニングして維持する必要があります。"}
リストを使った経験はあまりありません。
リスト {} を使用する方が効率的でしょうか、Text to Columns アプローチを使用しますか、それとももっと良い方法がありますか? リスト アプローチが最も効率的である場合、リスト内の各行、要素に対して [テーブル] > [スタック] と同等のことを行う最も効率的なアプローチは何ですか?
または、InspectionID# の列があります。 大規模な積み上げテーブルを作成する代わりに、InspectionID# をキーとして使用して、これを 2 つのテーブルに分割する方が効率的でしょうか?
Re: さまざまな要素数の構造化テキスト文字列を効率的に解析する方法クレイジ:
ありがとう! テキスト分析の初心者である私は、これまでパターン マッチング関数を使用したことがありません。 問題の良い解決策。 私は間違いなく、正規表現とパターン マッチングについて学ぶことに時間を費やします。
ところで、テキスト分析は、Mastering JMP ウェビナーのトピックとして最適です。
Re: さまざまな要素数の構造化テキスト文字列を効率的に解析する方法最初の 100 行をいじってみると、次のようなマップになります。
LocationsLocations場所
コメント フィールドのみを取得する数式列を次に示します。
a = :Violations;
b = "";
Pat Match( a, // full violation text
Pat Repeat(
Pat Arb() + "Comments:"
+ ( Pat Break( "|" ) | Pat Rem()) >> c // the interesting bit
+ Pat Test( // not really a test, just some JSL to build text
b = b || "|" || c; // build text here
1; // always succeed the test
)
),
NULL, // no replacement
FULLSCAN // get the final one
);
b;
テキスト エクスプローラーは、新しい列を使用してクラスターを形成できます。
clustersclustersクラスター
実際の検査結果に対してコメントのクラスター番号をプロットすると有望に見えます。クラスター 2 のコメントは不合格となり、クラスター 4 のコメントは不合格になりました。 通常は、「換気フード フィルターにグリースが蓄積していることが観察されました。 換気フードのフィルターを掃除しなければならない」(合格)vs「手洗いも食品用手袋の取り外しも禁止」(不合格)。
clustered by comment textclustered by comment textコメント テキストでクラスタ化
Re: さまざまな要素数の構造化テキスト文字列を効率的に解析する方法145K 行が解析のアイデアにとって遅すぎるとは思いません。 おそらく、0 または 1 の違反の種類ごとにインジケーター列が必要になると思います。 JMP 13 を使用している場合は、コメントでテキスト エクスプローラーを使用できます。一定の説明を除いて、すべてのコメントを 1 つの文字フィールドにまとめて実行することをお勧めします。