問題タブ [parsing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C#HTMLパーサーを探しています
重複の可能性:
C#でhtmlを解析するための最良の方法は何ですか?
HTMLドキュメントの構造を抽出したいので、コンテンツよりもタグの方が重要です。理想的には、整形式のHTMLにもある程度対処できるはずです。
信頼性が高く効率的なパーサーを知っている人はいますか?
string - 人の名前を構成要素に解析する簡単な方法は?
多くの連絡先管理プログラムがこれを行います。名前 (「John W. Smith」など) を入力すると、内部的に次のように自動的に分割されます。
名:ジョン
ミドルネーム: W.
姓:スミス
同様に、"Mrs. Jane W. Smith" や "Dr. John Doe, Jr." などを計算します。正しくも同様です(名前に「接頭辞」や「接尾辞」などのフィールドを許可すると仮定します)。
これは、人々がやりたいと思うかなり一般的なことだと思います...だから問題は...どうやってやりますか? これには簡単なアルゴリズムがありますか?もしかして正規表現?
私は .NET ソリューションを求めていますが、うるさいわけではありません。
更新:すべてのエッジケースと文化をカバーする簡単な解決策がないことを理解しています...しかし、議論のために、名前をバラバラにする必要があるとしましょう(フォームに記入する-たとえば、税金やその他のように)政府のフォーム - 好むと好まざるとにかかわらず、固定フィールドに名前を入力しなければならないケースの 1 つですが、必ずしもユーザーに個別のフィールドに名前を入力するよう強制する必要はありません (入力が少ない = より簡単です)。初心者ユーザー)。
最初、中間、最後などをプログラムに (できる限り) "推測" させたいと思うでしょう。可能であれば、Microsoft Outlook が連絡先に対してどのようにこれを行うかを見てください。名前を入力することはできますが、明確にする必要がある場合は、開くことができる特別な小さなウィンドウがあります。私は同じことをします - ユーザーが別々の部分に名前を入力したい場合に備えてウィンドウを提供します - ただし、1 つのボックスに名前を入力し、最も一般的な名前をカバーする「最良の推測」を行うことができます。
c# - 文字列が例外をスローせずにGUIDであるかどうかをテストしますか?
文字列をGUIDに変換したいのですが、例外のキャッチに依存したくありません(
- パフォーマンス上の理由から-例外は高額です
- 使いやすさの理由から-デバッガーがポップアップします
- 設計上の理由から-期待されるものは例外ではありません
言い換えれば、コード:
適切ではない。
RegExを使用してみますが、GUIDは括弧でラップしたり、ブレースでラップしたり、ラップしなかったりする可能性があるため、難しくなります。
さらに、特定のGUID値が無効だと思いました(?)
アップデート1
ChristianKFormatException
は、すべてではなく、のみをキャッチすることをお勧めしました。質問のコードサンプルを変更して、提案を含めました。
アップデート2
スローされた例外について心配するのはなぜですか?無効なGUIDが頻繁に発生することを本当に期待していますか?
答えはイエスです。それが私がTryStrToGuidを使用している理由です-私は悪いデータを期待しています。
例1 名前空間の拡張子は、フォルダー名にGUIDを追加することで指定できます。フォルダ名を解析して、最後の。の後のテキストかどうかを確認している可能性があります。GUIDです。
例2頻繁に使用されるWebサーバーを実行していて、ポストバックされたデータの有効性を確認したい場合があります。無効なデータが必要以上に2〜3桁高いリソースを拘束することは望ましくありません。
例3ユーザーが入力した検索式を解析している可能性があります。
それらがGUIDを入力した場合、それらを特別に処理したいと思います(たとえば、そのオブジェクトを具体的に検索したり、応答テキストでその特定の検索語を強調表示してフォーマットしたりします)。
アップデート3-パフォーマンスベンチマーク
10,000個の良いGUIDと10,000個の悪いGUIDの変換をテストします。
ps質問を正当化する必要はありません。
parsing - Flex を使用して 2 パス スキャナーを実装するにはどうすればよいですか?
ペット プロジェクトとして、Web スクリプト言語として使用できる、独自の設計による基本的な言語の実装を試みたいと考えています。C++ プログラムを Apache CGI として実行するのは簡単なので、実際の作業は、非コード (HTML/CSS マークアップ) とサーバー側コードを含む入力ファイルを解析する方法にあります。
学部生のコンパイラ コースでは、FlexとBisonを使用して、単純な言語のスキャナーとパーサーを生成しました。私たちは文法のコピーを受け取り、単純な言語を仮想マシン用の単純なアセンブリに変換するパーサーを作成しました。flex スキャナーは入力をトークン化し、トークンを Bison パーサーに渡します。
それと私がやりたいことの違いは、PHP のように、この言語にはプレーンな HTML マークアップと、次のように散在するスクリプト言語を含めることができるということです。
次のように入力ファイルを解析するのが効率的であると仮定するのは間違っていますか?
- スクリプト開始タグが見つかるまで入力をスキャンします ('
- 2 番目のスキャナーは、入力ファイルのサーバー側スクリプト セクションを (開始タグ: '' から) トークン化し、そのトークンをパーサーに渡します。パーサーは、ファイル内のマークアップについて知る必要はありません。
- 制御は、この一般的なパターンを継続する最初のスキャナーに戻されます。
基本的に、最初のスキャナーは、マークアップ (変更されずにブラウザーに直接返される) と、2 番目のスキャナーに渡されるコードのみを区別します。2 番目のスキャナーは、コードをトークン化し、トークンをパーサーに渡します。
これが堅実な設計パターンでない場合、PHP などの言語はどのようにして入力のスキャンとコードの解析を効率的に処理するのでしょうか?
parsing - オメタの特別なところは何ですか?
Ometaは「パターン マッチング用の新しいオブジェクト指向言語」です。Lexx/Yacc や Pyparsing などの文法を解析するための Oz ツールなどの言語で、パターン マッチングに遭遇したことがあります。サンプル コードを見たり、ディスカッションを読んだり、友人と話したりしても、Ometa が特別な理由 (または、少なくとも一部の人々がそれをそう考える理由) を理解することはできません。説明はありますか?
python - PLY: C パーサーでのトークン シフトの問題
PLY を使用して C パーサーを作成していますが、最近問題が発生しました。このコード:
my_type は、以前は型として使用されていた型として定義されているため、正しい C コードです。型と単純な識別子を区別するためにレクサーが使用するパーサーの型シンボル テーブルに入力することで、これを処理します。
ただし、型宣言規則は SEMI (';' トークン) で終了しますが、PLYmy_type
は最初の行で終了したと判断する前に、2 行目からトークンをシフトします。このため、型シンボル テーブルの更新をレクサーに渡す機会がなく、レクサーは my_type を型ではなく識別子として認識します。
修正のアイデアはありますか?
完全なコードは次の場所にあります: http://code.google.com/p/pycparser/source/browse/trunk/src/c_parser.py これより小さな例を作成する方法がわかりません。
編集:
問題が解決しました。以下の私の解決策を参照してください。
math - 数学パーサーのスマートな設計?
数学パーサーを設計する最も賢い方法は何ですか? つまり、数学文字列 ("2 + 3 / 2 + (2 * 5)" など) を受け取り、計算値を返す関数ですか? 私はVB6で何年も前に書いていましたが、肥大化してしまい、あまり移植性がありませんでした(またはその点でスマートではありません...)。一般的なアイデア、疑似コードまたは実際のコードを歓迎します。
python - 段落を分割するPython正規表現
Python で段落を分割するために使用する正規表現をどのように記述しますか?
段落は 2 つの改行 (\n) で定義されます。ただし、改行と一緒に任意の量のスペース/タブを含めることができ、それでも段落と見なす必要があります。
私はpythonを使用しているので、ソリューションは拡張されたpythonの正規表現構文を使用できます。((?P...)
ものを利用することができます)
例:
私ができる最高のものは: r'[ \t\r\f\v]*\n[ \t\r\f\v]*\n[ \t\r\f\v]*'
、すなわち
しかし、それは醜いです。もっと良いものはありますか?
編集:
拒否された提案:
r'\s*?\n\s*?\n\s*?'
\s
-> includesであるため、例 2 と 3 は失敗する\n
ため、2 を超える段落区切りが許可され\n
ます。
java - 最高の StAX 実装
簡単に検索すると、参照実装 ( http://stax.codehaus.org )、Woodstox 実装 ( http://woodstox.codehaus.org )、Sun の SJSXP 実装 ( https://sjsxp.dev.java.net ) が見つかります。 / )。
これらの相対的なメリットについてコメントしてください。また、私が検討すべき他の実装についても記入してください。
delphi - PHPの関数parse_urlをエミュレートするDelphi/FreePascalライブラリまたは関数
Object Pascalでサイトマッププロデューサーを実行していますが、PHPでparse_url関数をエミュレートするための優れた関数またはlibが必要です。
誰か良いものを知っていますか?