私が書いているPythonアプリケーションは、ソースコードから識別子とテキスト文字列を抽出する必要があります。それが見つかったものの小さな割合は、(一見)ランダムな文字列です。私はそれらをフィルタリングしたいと思いますが、これまでに正規表現を作成することができませんでした。非常に長い識別子が有効であるため、長さだけでフィルタリングすることはできません。実際にランダムな文字列の一致方法は?
UGxhemEgZGUgaWZXNaWdhZGyOiBDSUWRVNUQVYtSVBOIFVuaWQ
NSApplicationDidChangeScreenParametersNotification
次のようにジャンク配列を検出するだろう正規表現または他の検出システムを記述する方法があります:ここでの例では、同じ長さの有効な識別子に比べて、ランダムに取られていますか?私は、単語の大規模な辞書に対して文字列をテストしなければ、それができないことを疑うようになり始めています。これは、エラーが発生しやすく、計算集約型であると信じています。しかし、誰かがこのようなランダムな配列を検出したりマッチさせるアプローチをもっと賢明に知っているのかもしれません。
この問題の理想的な解決策は、文字列を入力として取り、「おそらく」ランダムであるかどうかを報告する関数です。それは偽陰性を生成する可能性があります(ランダムな文字列をランダムに誤って報告する可能性があります)が、確率は低いことが望ましいですが、偽陽性を報告してはなりません。重要な場合は、ストリングの長さは25文字から80文字の範囲にあるようです。
EDIT#1 2017-02-08:さらに考えてみると、可能なアプローチは一番下の一意の文字の最小数と一致する正規表現である可能性があります。例えば、2文字目は最初の文字とは異なるものでなければならず、前の3文字とは異なる3文字、前の3文字とは異なる4文字などでなければなりません。しかし、異なる正規表現演算子を見て、私は "否定的な後方参照"または "他のとちょうどマッチしたものとマッチする"のバージョンを見ません。誰かがこれにバリエーションを知っていれば、おそらく私はそれを動作させることができます。
EDIT#1 2017-02-10:私は上記の2つの例文を書いた方法が単一の文字列として誤解されるかもしれないと心配しています。上記の例は同じ長さの2つの別々の文字列です–それが不明な場合は誠実にお詫び申し上げます。ここにいくつかの例があります。各行は別個の識別子である。これは目的に応じて異なる長さも示しています。それは価値があるものは何でものために
shouldBeAbleToCountLiveNeighboursOfACellOnDiagonalsAndStraightLines
eXNZWzIGbHRpbWVkaWEgYWkIGFuaWhdGlvbiBkaXNcmlidXRlZCNCpUgRGlzdHJpYnV
dWxLXRvbGVyYWIHJlYWwtdGltZSBzeXNZWzLgKlSBEaXNcmlidXRlZCBBcmNoaXRlYR
dGhIExvIHNYmltbMgYSBsYSBwWdpbmEgeSBsbyBhbnVuYlhbWzIGVuIGVsIHByhpbWg
aGUgYuZmVyZWjZSBwcmjZWVkaWncygDQoNClNYmpcNpbNCkluIGyZGVyIHRvIHN
YQKUGFyYTogZXNYFyQGluYWlcCteAKQMIExaXMgQSgUGluZWRhDQpDQzogQuYVw
thehasSizeMatcherShouldMatchACollectionWithExpectedSize
QycmVvIGRlIERpcVtaWhYnDsgZGUgYWNaXZpZGFkZXMgZGUgbGEg
NSAppleEventManagerWillProcessFirstEventNotification
SNMTransformGizmoRotationControllerPerformTransform
RndkOiBEaWZcnDsgZGUgYudmjYXRvcmlhIFNVTUJVCBlbiBSRUJ
、私は約900 GitHubのリポジトリのセミランダム選択から自分のアプリケーションによって引っ張らペーストビンa list of the 1000 longest identifiersに置きます。実際の識別子とランダムな文字列の両方を含んでいます。
これにはNLTKが役立つことがあります。 – sytech
有効なトークンに英語が含まれていると仮定すると、無効なトークンは4つ以上の連続した子音の数が高くなります。 – swbandit
一見すると、文字列の長さが十分に長い場合(25-80は大丈夫かもしれません)、各文字の頻度を計算し、この分布を英語の標準と比較してみましょう。 –