問題タブ [text-processing]
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.
bash - テキストファイルの${}プレースホルダーを置き換える方法は?
「テンプレート」ファイルの出力をMySQLにパイプします。このファイルには、${dbName}
散在するような変数があります。これらのインスタンスを置き換えて出力を標準出力にダンプするコマンドラインユーティリティとは何ですか?
java - Javaでテキストドキュメントの言語を識別するにはどうすればよいですか?
文字列に英語のテキストが含まれているかどうかを教えてくれる既存の Java ライブラリはありますか (たとえば、フランス語とイタリア語のテキストを区別できるようにする必要があります。関数は、フランス語とイタリア語の場合は false を返し、英語の場合は true を返す必要があります)。 ?
algorithm - 「絶対」文字列メトリック
自然言語文字列の膨大な (ただし有限の) セットがあります。
各文字列を数値に変換する方法が必要です。どの文字列でも、値は毎回同じでなければなりません。
指定された 2 つの文字列が「異なる」ほど、対応する 2 つの値も異なるはずです。それらが「似ている」ほど、値の違いは少なくなります。
必要な文字列間の違いの正確な定義はまだわかりません。とにかく自然言語の解析はありません。おそらく、Levenstein のようなものである必要があります (ただし、Levenstein は相対的であり、絶対メトリックが必要です)。簡単なことから始めましょう。
寸法の更新
単一の数値ではなく、多次元 (3 次元が最適) のベクトルで解決できれば幸いです。
期待される結果の正確さに関する更新
こことここで正しく指摘されているように、ある文字列から別の文字列までの距離はMAX(firstStringLength, secondStringLength)
次元を持つベクトルです。一般に、情報の損失なしに次元数を減らすことはできません。
ただし、絶対的な解決策は必要ありません。N 次元の文字列空間から 3D 空間への「十分な」変換で解決します。
また、有限の長さの有限数の文字列があることにも注意してください。(ただし、文字列の数はかなり多く、約 8000 万 (10 GB) であるため、シングルパスのステートレス アルゴリズムを選択することをお勧めします。)
参考文献をスキャンしたところ、ヒルベルトの空間充填曲線がここで役立つ可能性があるという印象を受けました。Hilbert Space-Filling Curve 記事のクラスタリング プロパティの分析のように見えますが、私の問題に近いものについて説明しています...
ヒルベルト曲線アプローチの更新
- 各文字列を N 次元空間のポイントにマップします。ここで、N はセット内の文字列の最大長です。ところで、文字列の i 番目の文字コードを i 番目の座標値として使用できますか?
- その N 次元空間を通るヒルベルト曲線をプロットします。
- 文字列ごとに、文字列の座標に最も近い曲線上のポイントを取得します。その点のヒルベルト値 (曲線の始点からの長さ) が、私が求める 1 次元の値です。
- 3D 値が必要な場合は、ヒルベルト曲線を 3D でプロットし、上で計算したヒルベルト値に一致する点を選択します。
これは正しく見えますか?ここでの計算費用はいくらになるでしょうか。
arrays - キーと配列値のペアを入れ替えます
次のようにレイアウトされたテキストファイルがあります。
これを生成するために、キー (数字) と値 (CSV) (タブ文字で区切られています) を逆にしたいと思います。
(c に対して 2 が重複していないことに注意してください。)
この正確な出力は必要ありません。入力の数値は順序付けされていますが、値は順序付けられていません。出力のキーは、値と同様に順序付けする必要があります。
これどうやってするの?標準のシェル ユーティリティ (awk、sed、grep...) と GCC にアクセスできます。必要に応じて、他の言語用のコンパイラ/インタプリタを入手できます。
mysql - SQLを使用してテキストフィールドの単語数の統計を決定する
私は最近、いくつかのデータベース検索機能に取り組んでおり、ドキュメントごとの平均単語(データベースのテキストフィールドなど)などの情報を取得したいと考えていました。私がこれまでに見つけた唯一のこと(DB外で選択した言語で処理せずに)は次のとおりです。
これはうまくいくようです*が、他に提案はありますか?私は現在MySQL4を使用しています(このアプリのバージョン5にすぐに移行することを望んでいます)が、一般的なソリューションにも興味があります。
ありがとう!
*これは、コンテンツなどのHTMLも考慮していないため、これを判断するためのかなり大まかな方法であると想像できます。この特定のプロジェクトでは問題ありませんが、もっと良い方法はありますか?
更新:私が「より良い」とはどういう意味かを定義すること:より正確、より効率的に実行する、またはより「正しい」(保守が容易、グッドプラクティスなど)。私が利用できるコンテンツについては、上記のクエリは十分に高速で、このプロジェクトには正確ですが、将来的には同様のものが必要になる可能性があります(私は尋ねました)。
python - ファイルから行を削除
UNIX システムでテキスト処理を行っています。このマシンのコマンドラインにアクセスでき、Python、Perl、およびデフォルトのテキスト処理プログラム、awk などがインストールされています。
以下のようなテキストファイルがあります。
それは基本的に 3 つの行です: ID ID 日付
2 つの ID と日付を持たないすべての行を削除しようとしています。したがって、仕上げの結果は次のようになります。
皆さんはこれをどのように行うことをお勧めしますか? 合計で、テキスト ファイルの長さは約 30,000 行です。
乾杯
イーフ
perl - Perl: インデックスベースのアプローチで入力行をループする
これは、perl の初心者向けベスト プラクティスの質問です。私はこの言語が初めてです。質問は:
プログラムからの出力行を処理したい場合、どうすれば THE FIRST LINE を特別な方法でフォーマットできますか?
私は2つの可能性を考えています:
1) ループが最初に実行されると、フラグ変数が設定されます。ただし、サイクルごとに評価されます。悪い解決策
2) インデックスベースのループ (「for」など)。次に、i=1 でループを開始します。このソリューションははるかに優れています。問題は、どうすればそれを行うことができますか?
while ( <> ) コンストラクトでループするコードを見つけました。
ここでは、よりよく見ることができます:
また、ここのコードを修正することを躊躇しないでください。これは私の最初の perl 詩です。
ありがとう!
scripting - script(1) ツールの出力をきれいにするツールはありますか?
script(1)
対話型端末セッションの記録を保持するためのツールです。デフォルトでは、ファイルに書き込みますtranscript
。私の問題は、ksh93
readline 機能を備えた を使用しているため、トランスクリプトがあらゆる種類の端末エスケープ シーケンスでごちゃごちゃになってしまい、実際に実行されたコマンドを再構築することが非常に困難になる可能性があることです。迷子などは言うまでもありません^M
。
script
によって書かれたトランスクリプトファイルを読み取り、すべてのジャンクを削除し、シェルが実行していると考えていたものを再構築するツールを探しているので、表示されるものと$PS1
実際に実行されたコマンドがあります。それができない場合は、そのようなツールを作成する方法についての提案を探しています。理想的には、terminfo データベースの知識を使用するか、そうでない場合は ANSI エスケープ シーケンスを使用するだけです。
本当に機能する限り、シェルの履歴を参照するチートも許容されます。
c++ - 文字列内で繰り返される単語を整数に置き換える
C++ での文字列操作に問題があります。
ルール: 文章や段落で同じ「単語」が繰り返される場合は、整数にする必要があります。
例:
- 入力:
we prefer questions that can be answered, not just we discussed that.
- 出力:
1 prefer questions 2 can be answered, not just 1 discussed 2.