タグ付けされた質問 「parsing」

(非)構造化データを分析して、構造化された正規化形式に変換します。

5
安定した効率的な方法でWebページからデータを取得する
最近、正規表現を使用してWebサイトのHTMLを解析し、必要なデータを取得するのが最善の行動ではないことを学びました。 だから私の質問は簡単です:それでは、このデータを取得するための最良/最も効率的で一般的に安定した方法は何ですか? 私はそれに注意する必要があります: APIはありません データを取得できる他のソースはありません(データベース、フィードなどはありません) ソースファイルへのアクセスはありません。(公開ウェブサイトからのデータ) データがHTMLページのテーブルに表示される通常のテキストであるとしましょう 私は現在、私のプロジェクトにpythonを使用していますが、言語に依存しないソリューション/ヒントがいいでしょう。 副次的な質問として、WebページがAjax呼び出しによって構築された場合、どのように対処しますか? 編集: HTML解析の場合、データを取得する実際の安定した方法はないことを知っています。ページが変更されるとすぐに、パーサーが完了します。この場合の安定とは、ページを解析する効率的な方法です。ページが変更されない限り、同じデータセットに対して(同じデータセットに対して)常に同じ結果が渡されます。
11 data  parsing 

7
XMLを解析するためのテクニック
私は常にXMLの処理がやや面倒だと感じてきました。私はXMLパーサーの実装について話しているのではなく、ノードごとにXMLを処理するSAXパーサーのような既存のストリームベースのパーサーの使用について話しているのです。 はい、これらのパーサーのさまざまなAPIを学ぶのは非常に簡単ですが、XMLを処理するコードを見ると、常に多少複雑になることがわかります。本質的な問題は、XMLドキュメントが個々のノードに論理的に分離されているにもかかわらず、データの種類と属性が実際のデータから分離されていることが多いことです。したがって、特定のノードを個別に処理する場合、現在の場所と次に何をする必要があるかを判断するために、多くの余分な状態を維持する必要があります。 たとえば、典型的なXMLドキュメントからスニペットが与えられた場合: <book> <title>Blah blah</title> <author>Blah blah</author> <price>15 USD</price> </book> ...本のタイトルを含むテキストノードに出会ったとき、どのように判断しますか?イテレータのように動作し、を呼び出すたびにXMLドキュメントの次のノードを提供する単純なXMLパーサーがあるとしますXMLParser.getNextNode()。私は必然的に次のようなコードを書くことに気づきます。 boolean insideBookNode = false; boolean insideTitleNode = false; while (!XMLParser.finished()) { .... XMLNode n = XMLParser.getNextNode(); if (n.type() == XMLTextNode) { if (insideBookNode && insideTitleNode) { // We have a book title, so do something with it } …

2
SQLコードをフォーマットするためのアルゴリズム
SQLコード(SQL Server / MySQL)をフォーマットする(社内で使用する)ツールが必要です。 それを実行するさまざまなサードパーティのツールとオンラインWebサイトがありますが、正確にどのようにそれを必要とするのかはわかりません。 したがって、自分のニーズに合った独自のツールを書きたいと思います。 最初の質問は、SQLコードをどのようにフォーマットするかについて、標準または規約がありますか?(私が試したツールは別の方法でフォーマットしました) 2番目の質問、このタスクにどのように取り組むべきですか?最初にSQLクエリをツリーのようなデータ構造に変換する必要がありますか?

1
GCCがC ++とCのバイソンから再帰的降下パーサーに切り替えたのはなぜですか?
それを必要とする言語変更、またはバイソンがもはや適切または最適ではなくなったいくつかの実際的な理由はありましたか? 私は上を見ウィキペディア彼らが参照し、切り替えることGCC 3.4とGCC 4.1のリリースノート。 これらのリリースノートには次のように記載されています。 手書きの再帰降下C ++パーサーは、以前のGCCリリースからのYACC派生のC ++パーサーに取って代わりました。新しいパーサーには、C ++ソースコードのより適切な解析、拡張機能の処理、適切なセマンティクス分析と解析の間の(可能な場合は)明確な分離に必要な、大幅に改善されたインフラストラクチャが含まれています。新しいパーサーは、古いパーサーで見つかった多くのバグを修正します。 そして: 古いBisonベースのCおよびObjective-Cパーサーは、新しい、より高速な手書きの再帰下降パーサーに置き換えられました 私が知りたいのは、彼らが抱えていた実際の問題と、Bisonを使用して解決することが不可能/非実用的である理由です。
10 c++  c  parsing  compiler 

3
コンパイラの作成コンパイラ-使用方法と機能に関する洞察
これは、言語設計で使用される概念をフレームワークの形で抽象化することを目的とした抽象化プロジェクトへの姉妹プロジェクトに焦点を当てた一連の質問の一部です。姉妹プロジェクトはOILexerと呼ばれ、一致時にコードインジェクションを使用せずに、文法ファイルからパーサーを構築することを目的としています。 構造タイピングに関連するこれらの質問に関連する他のいくつかのページは、ここに表示され、使いやすさはここにあります。フレームワークに関する問い合わせに関連するメタトピックと投稿する適切な場所は、こちらにあります。 特定の文法から解析ツリーの抽出を開始するところまで来ています。その後、DFAを使用して順方向パスを識別する再帰的降下パーサーが続きます(ANTLR 4のLL(*)と同様)。私はそれを開いて洞察を得るだろうと考えました。 パーサーコンパイラでは、どのような機能が理想的ですか? これまでのところ、実装されているものの簡単な概要です: テンプレート 特定の時点で何が有効であるかを把握しながら、予測を先読みします。 ルール内のリテラルを取得し、それらがどのトークンからのものであるかを解決するルール「非文字化」。 非決定的オートマトン 確定的オートマトン トークン認識のためのシンプルな字句状態マシン トークンの自動化方法: スキャン-コメントに役立ちます:Comment:= "/ *" Scan( "* /"); 減算-識別子に便利です:識別子:= Subtract(IdentifierBody、Keywords); 識別子がキーワードを受け入れないようにします。 エンコード-ベースN遷移のシリーズXカウントとしてオートメーションをエンコードします。 UnicodeEscape:= "\\ u" BaseEncode(IdentifierCharNoEscape、16、4); 16進数の4遷移を使用して、Unicodeを16進数でエスケープします。これとの違い:[0-9A-Fa-f] {4}は、Encodeを使用した結果の自動化で、許可される16進値のセットをIdentifierCharNoEscapeのスコープに制限します。したがって、\ u005cを指定すると、エンコードバージョンは値を受け入れません。このようなことには重大な注意事項があります。控えめに使用してください。結果として生じる自動化は非常に複雑になる可能性があります。 実装されていないのはCST生成です。これを機能させるには、適切なコンテキストを引き継ぐように決定論的自動化を調整する必要があります。 興味のある方のために、T *y♯プロジェクトの元のフォームをかなり印刷したものをアップロードしました。各ファイルは他のすべてのファイルにリンクする必要があります。それらに従うために個別のルールでリンクを開始しましたが、時間がかかりすぎました(自動化の方が簡単だったでしょう)。 さらにコンテキストが必要な場合は、それに応じて投稿してください。 編集5-14-2013:特定の言語でステートマシンのGraphVizグラフを作成するコードを書きました。 これがAssemblyPartのGraphVizダイグラフです。言語の説明でリンクされているメンバーは、そのルールのダイグラフを含む相対フォルダーにrulename.txtを持っている必要があります。例を投稿してから一部の言語の説明が変更されました。これは、文法に関することを簡略化するためです。これが興味深いgraphviz画像です。


2
重要な単語を見つけるための言語解析
私は、語彙のトピックにアプローチする方法についてのいくつかの入力と理論を探しています。 文字列のコレクションがあるとします。これは、1つの文または複数の文になる可能性があります。これらの文字列を解析して、最も重要な単語を取り除きたいと思います。おそらく、その単語がどれほど重要であるかを示すスコアが付いています。 私が意味することのいくつかの例を見てみましょう。 例#1: 「キューリグは本当に欲しいけど、買う余裕がない!」 これは非常に基本的な例で、1文だけです。人間として、ここでは「Keurig」が最も重要な言葉であることがすぐにわかります。また、「アフォー」は比較的重要ですが、それは明らかに文の主要なポイントではありません。「私」という言葉は2度出てきますが、実際には何の情報も伝えていないので、それほど重要ではありません。次のような単語/スコアのハッシュが表示されると思います。 "Keurig" => 0.9 "afford" => 0.4 "want" => 0.2 "really" => 0.1 etc... 例2: 「私の人生で最高の水泳練習の1つがありました。うまくいけば、自分の時間を維持して大会に参加できます。防水ではない時計を忘れずに持っていれば」 この例には複数の文があるため、全体を通してより重要な単語があります。例1のポイント演習を繰り返さないと、おそらく「水泳」(または「水泳練習」)、「競争」、および「ウォッチ」(または「防水」という非常に重要な単語が2つまたは3つ出てくると思います。ハイフンの扱い方に応じて、「時計」または「非防水時計」)。 このような例をいくつか挙げて、同様のことをするにはどうしたらよいでしょうか。すでにこれを行っている既存の(オープンソース)ライブラリまたはプログラミングのアルゴリズムはありますか?


4
コマンド処理アプリケーションを実装するにはどうすればよいですか?
数値を受け取り、その数値でコマンドを処理するシンプルな概念実証アプリケーション(REPL)を作成したいと考えています。 例:1から始めます。次にadd 2、「」と書いて、3を与えます。次にmultiply 7、「」と書いて、21を与えます。次に、素数かどうかを知りたいので、「is prime」と書きます(現在の数値- 21)、それは私に偽りを与えます。「is odd」は私に真実を与えるでしょう。等々。 さて、コマンドが少ない単純なアプリケーションの場合、単純なものでもコマンドswitchを処理できます。しかし、拡張性が必要な場合、機能を実装するにはどうすればよいですか?コマンドパターンを使用しますか?言語用のシンプルなパーサー/インタープリターを構築できますか?「multiply 5 until >200」のようなより複雑なコマンドが必要な場合はどうなりますか?再コンパイルせずにそれを拡張する(新しいコマンドを追加する)簡単な方法は何でしょうか? 編集:いくつかのことを明確にするために、私の最終的な目標はWolframAlphaに似たものを作ることではなく、(数値の)プロセッサのリストを作ることです。しかし、最初はゆっくりと始めたいと思います(単一の数値について)。 私は、Haskellを使用してリストを処理する方法に似たものを念頭に置いていますが、非常に単純なバージョンです。コマンドパターン(または同等のコマンド)のようなもので十分か、それとも目標を達成するために新しいミニ言語とパーサーを作成する必要があるのか​​と思いますか。 Edit2:すべての回答に感謝します。すべては私にとって非常に役に立ちましたが、エマッドカリームが最も私を助けてくれたので、それを答えとして選びます。再度、感謝します!

6
ファイルを解析する最良の方法
EDIFACTやTRADACOMSなどの有名なファイル形式をパーサーで作成するためのより良い解決策を見つけようとしています。 これらの標準に慣れていない場合は、Wikipediaからこの例を確認してください。 製品の在庫状況のリクエストに回答するために使用されるEDIFACTメッセージの例については、以下を参照してください。 UNA:+.? ' UNB+IATB:1+6XPPC+LHPPC+940101:0950+1' UNH+1+PAORES:93:1:IA' MSG+1:45' IFT+3+XYZCOMPANY AVAILABILITY' ERC+A7V:1:AMD' IFT+3+NO MORE FLIGHTS' ODI' TVL+240493:1000::1220+FRA+JFK+DL+400+C' PDI++C:3+Y::3+F::1' APD+714C:0:::6++++++6X' TVL+240493:1740::2030+JFK+MIA+DL+081+C' PDI++C:4' APD+EM2:0:130::6+++++++DA' UNT+13+1' UNZ+1+1' UNAセグメントはオプションです。存在する場合は、メッセージの残りの部分を解釈するために使用される特殊文字を指定します。この順序でUNAに続く6文字があります。 コンポーネントデータ要素セパレータ(:このサンプルでは) データ要素セパレータ(このサンプルでは+) 10進数の通知(このサンプルでは。) リリースキャラクター(このサンプルでは?) 予約済み、スペースでなければならない セグメントターミネーター(このサンプルでは ') ご覧のとおり、解析されるのを待機している特別な方法でフォーマットされたデータの一部です(XMLファイルのように)。 現在、私のシステムはPHPで構築されており、セグメントごとに正規表現を使用してパーサーを作成できましたが、問題は誰もが標準を完全に実装しているわけではないということです。 一部のサプライヤーは、オプションのセグメントとフィールドを完全に無視する傾向があります。他の人は他より多くのデータを送信することを選択するかもしれません。そのため、ファイルが正しいかどうかをテストするために、セグメントとフィールドのバリデーターを作成する必要がありました。 私が今持っている正規表現の悪夢を想像できます。さらに、各サプライヤーは、各サプライヤーのパーサーを作成する傾向がある正規表現に多くの変更を加える必要があります。 質問: 1-これは(正規表現を使用して)ファイルを解析するためのベストプラクティスですか? 2-ファイルを解析するためのより良いソリューションはありますか(おそらくそこに既製のソリューションがあるでしょう)?どのセグメントが欠落しているか、またはファイルが破損しているかを表示できますか? 3-とにかくパーサーを構築する必要がある場合、どの設計パターンまたは方法論を使用する必要がありますか? ノート: yaccとANTLRについてどこかで読みましたが、私のニーズに合っているかどうかはわかりません。


1
AST形状を定量的に比較する
同様のソースコードプログラム(C、C ++、Go、またはGCCでコンパイルされたもの)の抽象構文ツリーの形状をどのように比較できますか? 私は推測するソースコードの盗用検出は、そのような技術を使用しますが、私はそれと呼ばれることだろうかの見当がつかない... たとえば、統一を使用してASTを比較できますが、それはブール値の回答しか提供しません。数値の「距離」、またはある種の数値ベクトル(たとえば、機械学習や分類アルゴリズム、またはその他のビッグデータのものに後でフィードされる)を提供するいくつかの手法を探しています。 大規模なソースコードセットでのビッグデータや機械学習アプローチへの言及も歓迎します。 (このように広範またはあいまいな質問で申し訳ありません。使用する用語がわかりません) 2つのASTまたはプログラムを単純に比較したくありません。大量のプログラム(Debianディストリビューションのソースコードの半分など)を処理し、その中に同様のルーチンを見つけたいと思っています。私はすでにMELTを使用してGCC内部表現(Gimple)に取り組んでいるため、それを活用したいので、いくつかのメトリック(どれか?循環的複雑度はおそらく十分ではない)をデータベースなどに保存し、比較して処理します... 補遺:MOSSシステムと紙について発見されましたが、構文の形はまったく気にしていないようです。ツリーの編集距離も調べます。 ソースコードの類似性を探すことについて(JérémieSalvucciに感謝)Michel Chilowi​​czの博士論文(2010年11月フランス語)も発見

3
文法、レクサー、パーサーに関する説明
背景情報(5月スキップ):提供されているDSLの文法を設計する必要があるuniで設定されたタスクに取り組んでいます。文法はBNFまたはEBNFでなければなりません。他にも、文法の語彙ルールと構文解析ルールについて評価されています。たとえば、ルールが言語サブセットに適しているかどうか、これらのルールがどれほど包括的であるか、ルールがどれほど明確であるかなどです。 私が理解していないのは、これらのルールがBNFで定義された文法でカバーされているかどうかです(これは私たちにとって新しいトピックです)。 質問:BNFまたはEBNFのいずれかで定義されている特定の言語の文法には、字句解析 または構文解析、あるいはその両方のルールが含まれていますか?(またはこれらは他の場所で指定する必要がありますか?) また、何が字句規則と考えられますか?そして、何が解析ルールと考えられますか?

3
混合テキストでイタリックを反転させる正しいアルゴリズムは何ですか?
質問の動機は、以下のセクションに描かれています。テキストをイタリックにする方法はたくさんあるので、おそらく、「イタリックスワップアルゴリズム」は複数あるでしょう。この問題は、XHTMLコードの追加の難しさ、および<i>タグの使用を明らかにします。例: <!-- original text: --> <p id="p1"><i>Several more</i> Homo sapiens <i>fossils were discovered</i>.</p> <!-- same text, swapping italics: --> <p id="p2">Several more <i>Homo sapiens</i> fossils were discovered.</p> このように見えます さらにいくつかのヒトの化石が発見されました。 さらにいくつかのヒトの化石が発見されました。 アルゴリズムの紹介と議論 「レイアウトソリューション」の場合、最も簡単なアルゴリズムはfont-style、すべてのテキストブロックのCSSプロパティをチェックし、jQueryで反転します。 $('#myFragment *').each(function(){ if ($(this).css('font-style')=='italic') $(this).css('font-style','normal') else $(this).css('font-style','italic') }); しかし、このアルゴリズムはもう少し複雑なテストには耐えられません。 <p id="p3"><b><i>F</i>RAGMENT <big><i>with italics</i> and </big> withOUT.</b></p> 2番目に単純なアルゴリズムは具体的なソリューションであり、「例」セクションで使用されました。2つのステップがあります。 XHTMLフラグメントをイタリック体で囲みます。 …

4
「デッドマンスイッチ」を使用して、時間に敏感なコードを管理する
私たちのソフトウェア環境では、おそらく良い習慣として、私たちはしばしばa / bテストを実行します。ただし、私たちの環境は、非常に短い時間で、コードがデッドテストで非常に壊れやすくなるように設定されています。テストレジストリは、内部wikiページのコレクションに過ぎません。 私は「デッドマンスイッチ」スタイルの機能しないコード管理を考えました。この用語に慣れていない場合は、何かがトリガーされないようにするために定期的にリセットする必要があるスイッチを指します。つまり、応答しない場合、スイッチがトリガーし、スイッチに何をしたいかを示します。トリガーが実行されます。 たとえば、いくつかのコードを記述し、何らかの方法でこのシステムに登録し、事前に選択した日付が循環すると、介入しない限り(手動で)このコードが削除される(自動的にクリーンアップされる)との通知を受け取りますクリーンアップ、またはスヌーズ)。 そのようなシステムを組み込むことの長所、短所、実行可能性は何ですか?それは可能ですか?腐敗に対してコードを管理するいくつかの代替方法は何でしょうか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.