問題タブ [difflib]
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.
python - difflib.get_close_matches()で大文字と小文字を区別しない
大文字と小文字を区別しないようにdifflib.get_close_matches()に指示するにはどうすればよいですか?キャピタライゼーションを含む定義済みの形式の辞書があります。ただし、テスト文字列には完全な大文字化がある場合とない場合があり、これらは同等である必要があります。ただし、結果は適切に大文字にする必要があるため、変更された辞書を使用することはできません。
出力:
作業コード:
Hugh Bothwellの回答に基づいて、次のようにコードを変更して、機能するソリューションを取得しました(これは、複数の結果が返された場合にも機能するはずです)。
出力:
python - difflib.SequenceMatcher get_matching_blocks()を使用した説明されていない動作
私はfuzzywuzzyを試していましたが、かなりの数のケースで間違った結果が生成されていることに気付きました。デバッグしようとしましたが、説明が難しいget_matching_blocks()のシナリオに遭遇しました。
n
get_matching_blocks()についての私の理解は、インデックスの最初の文字列の長さのサブ文字 列がインデックスの2番目の文字i
列の長さのサブ文字列と正確に一致するトリプレットタプル(i、j、n)を返す必要があるということです。n
j。
では、なぜ上記のコードが一致するブロックを見つけられないのでしょうか?
python - 差集合を使用して欠損値の行番号を取得する
次の関数を使用して行番号を割り当てる 2 つのリストがあります (UNIX の nl に似ています)。
これは次のようなリストを返します: 1: 12 14
2: 20 49
3: 21 28
. infile
私が使用している では、行番号が非常に重要です。2 番目のリストも同じように構成されていますが、行番号には何の意味もありません。2 番目のファイルからリストの違いを見つけ、最初のファイルから行番号を返す必要があります。たとえば、2 番目のファイルの場合:最初のリストから欠落している値の行番号5: 12 14
48: 20 49
のみを返します。3
これが私が試したことです:
戻り値: [12 14\n', '20 49\n', '21 28\n']
-- 明らかに必要なものではありません。何か案は?
python - Python の difflib の SequenceMatcher がレーベンシュタイン距離を計算するより効率的な方法を提供できる可能性はありますか?
レーベンシュタイン距離を計算するための一般的なアルゴリズムの教科書の例を次に示します ( Magnus Hetland の Web サイトから引用しました)。
しかし、difflib の SequenceManager を使用する、より効率的な (そして潜在的により洗練された) 純粋な Python 実装があるのではないかと考えていました。あれこれいじってみた結果、以下のようになりました。
失敗するテストケースを思いつくことができず、パフォーマンスは標準アルゴリズムよりも大幅に優れているようです。
以下は、difflib に依存するレーベンシュタイン アルゴリズムの結果です。
そして、これが標準の純粋な python 実装です。
difflib の SequenceMatcher を使用したアルゴリズムのパフォーマンスは本当に優れていますか? それとも、比較を完全に無効にする C ライブラリに依存していますか? C 拡張機能に依存している場合、difflib.py の実装を見てどうすればわかりますか?
Python 2.7.3 の使用 [GCC 4.2.1 (Apple Inc. ビルド 5666)]
よろしくお願いします。
python - difflib の charjunk を使用して空白を無視できますか?
文字列の 2 つのリストの違いを比較したいと思います。私の目的では、空白はノイズであり、これらの違いを示す必要はありません。difflib のドキュメントを読むと、「デフォルト [for charjunk
] はモジュールレベルの関数IS_CHARACTER_JUNK()
であり、空白文字が除外されます」。完璧ですが、動作していない、または大きな違いがあるとは思わないことを除いて (<-しゃれ!)。
出力:
他にもいくつかのオプションを試しましたlinejunk
が、空白の結果としての違いを実際に無視するものはありません。私は何のcharjunk
ためにあるのかについて間違った解釈をしていますか?
補足として、この制限を回避するには、文字列を前処理して、re.sub(r'\W+', ' ', 'foo\t bar')
.
python - Pythonで2つの文字列を比較する
2つの文字列を比較するか、少なくとも文字列から別の文字列への文字のシーケンスを見つける必要があります。2つの文字列にはmd5
、一致するものが見つかった場合に比較して言う必要のあるファイルが含まれています。
私の現在のコードは次のとおりです。
私が得る出力は次のとおりです。
したがって!dlmd5
からの一致がありますがorigmd5
、どういうわけかそれが見つかりません...私はどこかで何か間違ったことをしています...私を助けてください:/
python - ファイルを比較するpython difflib
difflib を使用して、つぶやきを含む 2 つのテキスト ファイルの差分を作成しようとしています。コードは次のとおりです。
PTITVProgs
テキストファイルは次のとおりです。
new_tweets
テキストファイルは次のとおりです。
プログラムから得た差分は次のとおりです。
2 つのソース ファイル (PTITVProgs と new_tweets) を簡単に比較するとわかるように、それらの違いは4 月 7 日の3つのツイートと 4 月 3 日の 3 つのツイートです。
new_tweets
入っていない行をPTITVProgs
差分に表示したいだけです。
しかし、見たくないテキストがたくさんスローされます。私は何*** 1,7***
を知りません*** 1,3***
し、差分出力では...の略ですか?変更された行のみを取得する適切な方法は何ですか?
python - Python Difflib - 「変更」操作で SDiff シーケンスを取得する方法
Python のdifllibのドキュメントを読んでいます。それぞれのドキュメントによると、 Differ delta はシーケンスを提供します
しかし、「変更」操作はどうでしょうか。Perl のsdiffの結果に似た "c" 命令を取得するにはどうすればよい ですか?
python - Pythonで文字列を比較するときにスペースを無視する
difflib python パッケージを使用しています。引数を設定isjunk
しても、計算された比率は同じです。isjunk
の場合、スペースの違いは無視されませんlambda x: x == " "
か?