問題タブ [text-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.
math - 単純な数式の文字列を評価する
チャレンジ
これが課題です (私自身の発明によるものですが、以前に Web の他の場所に登場したとしても驚かないでしょう)。
単純な数式の文字列表現である単一の引数を取り、それを浮動小数点値として評価する関数を作成します。「単純式」には、正または負の 10 進数、+、-、*、/、(、)のいずれかを含めることができます。式は (通常の)中置記法を使用します。演算子は、 BODMASのようにではなく、出現順に評価する必要がありますが、もちろん括弧は正しく観察する必要があります。関数は、任意の正しい結果を返す必要があります。この形の可能な表現。ただし、関数は不正な式 (つまり、構文が正しくないもの) を処理する必要はありません。
式の例:
ルール
ここで何らかの「不正行為」/狡猾さを予想しているので、事前に警告させてください! チートとは、eval
JavaScript や PHP などの動的言語で または同等の関数を使用すること、またはコードをオンザフライでコンパイルして実行することを指します。(ただし、「BODMAS なし」という私の仕様は、これをほぼ保証していると思います。) それ以外には、制限はありません。ここでいくつかの Regex ソリューションを期待していますが、それだけではありません。
ここでは、主に C#/.NET ソリューションに関心がありますが、他の言語も完全に受け入れられます (特に、関数型/混合型アプローチの場合は F# と Python)。答えとして(少なくともその言語については)最短または最も独創的な解決策を受け入れるかどうかはまだ決めていませんが、上記で禁止したものを除いて、任意の言語でのあらゆる形式の解決策を歓迎します!
私の解決策
C# ソリューションをここに投稿しました(403 文字)。更新: 私の新しいソリューションは、少し素敵な正規表現の助けを借りて、294 文字で古いソリューションを大幅に上回りました! これは、より軽い構文 (特に機能的/動的なもの) を使用する一部の言語によって簡単に打ち負かされるのではないかと考えており、正しいことが証明されていますが、誰かがまだ C# でこれを打ち負かすことができるかどうかに興味があります。
アップデート
私はすでにいくつかの非常に狡猾な解決策を見てきました。投稿してくれたすべての人に感謝します。私はまだそれらをテストしていませんが、人々を信頼し、少なくとも与えられたすべての例で動作すると仮定します.
注意点として、再入可能性 (つまり、スレッドセーフ) は関数の要件ではありませんが、おまけです。
フォーマット
簡単に比較できるように、すべての回答を次の形式で投稿してください。
言語
文字数:???
完全に難読化された機能:
クリア/半難読化機能:
それが取るアルゴリズム/巧妙なショートカットに関するメモ。
php - 単一の文字列に存在するユーザー データの複数の予測どおりにフォーマットされた部分文字列を解析する
次のような特定のパターンの非常に長い文字列があります。
等々。このパターンが繰り返されます。
userAccountName:
この文字列を処理して、などの値を取得する方法を見つける必要がありますuserCompany:
(つまり、できれば連想配列またはそのような便利な形式で)。
これを行う簡単な方法はありますか、またはこの文字列をさまざまな部分に分割する独自のロジックを作成する必要がありますか?
language-agnostic - プレーンテキストリストをHTMLに解析する賢い方法はありますか?
質問:プレーンテキストリストをHTMLに解析する賢い方法はありますか?
それとも、難解な再帰的手法に頼らなければならないのでしょうか、それとも総当たり攻撃に頼らなければならないのでしょうか。
私はこれをしばらくの間疑問に思っていました。私自身の反芻では、私は何度もブルートフォース、そして奇妙な再帰的な方法に戻ってきました...しかし、それはいつもとても不格好なようです。もっと良い方法があるはずですよね?
それで、賢い方法は何ですか?
仮定
シナリオを設定する必要があるので、これらは私の仮定です。
リストは、順序付けされていないリストまたは順序付けられたリストのいずれかで、(少なくとも)3レベルの深さでネストできます。リストのタイプと深さは、プレフィックスによって制御されます。
- プレフィックスの後に必須のスペースがあります。
- リストの深さは、プレフィックスにスペースなしの文字がいくつあるかによって制御されます。
*****
5つのリストの深さでネストされます。 - リストタイプは、文字タイプ、
*
または-
順序付けされていないリスト、無秩序なリストによって強制され#
ます。
\n
アイテムは1文字だけで区切られます。(2つの連続する新しい行が「グループ」、段落、div、またはMarkdownやTextileのような他のHTMLタグとして適格であるとしましょう。)リストタイプは自由に混在させることができます。
出力は有効なHTML4である必要があり、できれば末尾に
</li>
sが付いている必要があります。解析は、必要に応じて正規表現を使用して、または使用せずに実行できます。
サンプルマークアップ
必要な出力
読みやすさのために少し分割しましたが、これの有効なバリエーションである必要があります(私はちょうどそれをうまく間隔を空けていることを覚えておいてください!):
要約すれば
どうやってこれをしますか?予想外に繰り返されるリストを処理するための良い方法を本当に理解したいと思います。なぜなら、それは誰もが絡むための醜い混乱として私を襲うからです。
code-golf - Code Golf: インスタンス数を含む、テキストからキーワードのリストをすばやく作成する
私はすでに PHP を使用してこのソリューションを自分で考え出しましたが、どうすれば別の方法で実行できるか興味があります。私が主に興味を持っている 2 つの言語は PHP と Javascript ですが、今日の他の主要な言語 (主に C#、Java など) でもこれがどれほど迅速に行われるかを知りたいと思います。
- X より大きい出現回数を持つ単語のみを返す
- Y より大きい長さの単語のみを返す
- 「and、is、the など」などの一般的な用語を無視する
- 処理の前に句読点を自由に削除してください (つまり、"John's" は "John" になります)。
- 結果をコレクション/配列で返す
エクストラクレジット
- 引用されたステートメントを一緒に保管してください(つまり、「彼らは明らかに「真実であるには良すぎる」でした」)「真実であるには
良すぎる」が実際のステートメントになります
エクストラエクストラクレジット
- 一緒に見つかる頻度に基づいて、まとめておくべき単語をスクリプトで判断できますか? これは、事前に言葉を知らずに行われます。例:
*「ショウジョウバエは医学研究において素晴らしい存在です。ショウジョウバエについては過去に多くの研究が行われ、多くのブレークスルーがもたらされました。今後もショウジョウバエの研究は続けられますが、私たちの方法は変わるかもしれません。」*
明らかに、ここにある単語は「フルーツ フライ」であり、簡単に見つけることができます。あなたの search'n'scrape スクリプトもこれを判断できますか?
ソーステキスト: http://sampsonresume.com/labs/c.txt
回答形式
- 操作がどれくらい続いたかに加えて、コードの結果、出力を確認することは素晴らしいことです.
text-parsing - 大きな文書のテキスト分析
複数の章のドキュメントを2番目のドキュメントと比較して、それらの類似性を判断する必要があるプロジェクトがあります。問題は、これをどのように行うか、どのようなアプローチが存在するか、またはそれらが利用可能なライブラリであるかどうかがわからないことです。
私の最初の質問は...何が似ているのですか?一致する単語の数、一致する連続する単語の数?
各ドキュメントを単語と場所を含む配列に配置するパーサーを作成し、それらを比較するのを見ることができました。
テキスト分析のためのアルゴリズムまたはライブラリで以前の質問を見ました 。具体的には、支配的な単語、テキスト全体のフレーズ、およびテキストのコレクションです。
しかし、それは私がやろうとしていることとは少し違うようです。
人々が持っているかもしれないどんなオプションやポインタも素晴らしいでしょう!
html - 優れたパーサーを作成する - HTML/ブログから関連テキストを抽出する
ブログ投稿でうまく機能する一般化された HTML パーサーを作成しようとしています。パーサーを特定のエントリの URL に向けて、投稿自体のクリーンなテキストを取得したいと考えています。私の基本的なアプローチ (Python から) は、BeautifulSoup と Urllib2 の組み合わせを使用することでした。これは問題ありませんが、ブログ エントリの適切なタグを知っていることを前提としています。誰もがより良いアイデアを持っていますか?
誰かが拡張できるかもしれないいくつかの考えがありますが、実装するのに十分な知識/ノウハウがまだありません。
Unix プログラム 'lynx' は、ブログの投稿を特にうまく解析しているようです。彼らはどのパーサーを使用していますか?
ジャンク広告などを自動的に削除するサービス/パーサーはありますか?
この場合、ブログ投稿は通常、class="entry" などの特定の定義タグに含まれているという前提で問題ないかもしれないという漠然とした考えを持っていました。したがって、それらの間に最もきれいなテキストがある囲みタグを見つけるアルゴリズムを作成することが可能かもしれません-これに関するアイデアはありますか?
ありがとう!
c# - C#で(Googleカレンダーができるように)相対日付を解析するライブラリ
これと同じ質問をしています: Perl で相対日付を解析するにはどうすればよいですか? しかしC#で。
これが重複している場合は申し訳ありませんが、そうであれば削除してください。
そのようなライブラリは存在しますか?
ありがとう
php - 値がさまざまな数の空白文字で区切られているテキストファイルの行を解析します
会社名とそのティッカーシンボルを別の配列で取得する必要があります。txtファイルに保存されている私のデータは次のとおりです。
等々
正規表現やその他の手法を使用してこれを行うにはどうすればよいですか?
fortran - Fortran の文字列: 移植可能な LEN_TRIM と LNBLNK?
string 内の最後の非空白文字の位置を特定するための移植可能な関数/サブルーチンが必要です。LEN_TRIM
との 2 つのオプションが見つかりまし LNBLNK
た。ただし、コンパイラごとに標準が異なるようです。次のコンパイラの公式ドキュメントは、LEN_TRIM が次のプラットフォームの Fortran 95 標準の一部であることを示唆しています。
ただし、F95 標準より前にリリースされたコンパイラでは何も保証されていないようです。 私の経験では、古いコンパイラは または のいずれかを指定する可能性がありますLEN_TRIM
がLNBLNK
、必ずしも両方を指定するとは限りません。私の解決策は、プリプロセッサ条件を使用することでした:
そして-DUSE_LEN_TRIM
、プリプロセッサに渡します。ただし、私はプリプロセッサの条件と追加のコンパイル時フラグの大ファンではありません。 文字列内の空白以外の最後の文字の位置を特定する移植可能な (Fortran 95 標準より前の) 関数について何か提案はありますか?