IT박스

putjbtghguhjjjanika와 같은 문자열을 감지하는 방법이 있습니까?

itboxs 2020. 11. 26. 08:05
반응형

putjbtghguhjjjanika와 같은 문자열을 감지하는 방법이 있습니까?


사람들은 내 웹 사이트에서 검색하며 이러한 검색 중 일부는 다음과 같습니다.

tapoktrpasawe
qweasd qwa as
aıe qwo ıak kqw
qwe qwe qwe a

내 질문은 위의 것과 유사한 문자열을 감지하는 방법이 있습니까?

100 % 감지하는 것은 불가능하다고 생각하지만 어떤 솔루션이든 환영합니다. :)

편집 : "무의미한 검색"을 의미합니다. 예를 들어, 어떤 사람들은 내 검색 엔진에서 "asdqweasdqw", "paykaprkg", "iwepr wepr ow"와 같은 문자열을 검색하는데, 저는 무의미한 검색을 감지하고 싶습니다.

검색 결과가 0인지 여부는 중요하지 않습니다. 이 논리를 사용할 수 없습니다.

"일반적인 단어"를 고려하면 일부 새로운 브랜드 또는 제품은 무시됩니다.

도와 주셔서 감사합니다


영어로 된 텍스트 묶음에서 문자로의 전환 모델을 만들 수 있습니다. 예를 들어, 't'뒤에 'h'가있는 것이 얼마나 흔한 지 알 수 있습니다. 영어에서는 'q'다음에 'u'가 나올 것으로 예상합니다. 'q'다음에 'u'가 아닌 다른 값이 나오면 이것은 매우 낮은 확률로 발생하므로 매우 놀랍습니다. 확률을 가질 수 있도록 테이블의 개수를 정규화하십시오. 그런 다음 쿼리를 위해 매트릭스를 살펴보고 수행 한 전환의 결과를 계산합니다. 그런 다음 쿼리 길이로 정규화합니다. 숫자가 적 으면 의미없는 쿼리 (또는 다른 언어로 된 항목)가있을 수 있습니다.

많은 쿼리 로그가있는 경우 먼저 일반 영어 텍스트 모델을 만든 다음 해당 모델 학습 단계에서 자신의 쿼리에 가중치를 크게 부여 할 수 있습니다.

배경은 Markov Chains 에 대해 읽어보십시오 .

편집, 여기 Python에서 구현했습니다.

https://github.com/rrenaud/Gibberish-Detector

buggedcom은 PHP로 다시 작성했습니다.

https://github.com/buggedcom/Gibberish-Detector-PHP

my name is rob and i like to hack True
is this thing working? True
i hope so True
t2 chhsdfitoixcv False
ytjkacvzw False
yutthasxcvqer False
seems okay True
yay! True

말도 안되는 검색을 의미한다고 가정하면 ... 가치보다 더 문제가 될 것입니다. 당신은 그들에게 검색 기능을 제공하고 있습니다. 그들이 원하는대로 사용하게하십시오. 이상한 문자 그룹을 감지하는 몇 가지 알고리즘이 있다고 확신하지만 단순히 결과를 반환하지 않는 것보다 더 많은 리소스 / 노력이 필요할 것입니다.


당신은 할 수있는 유래가 무엇을 하고 문자열의 엔트로피를 계산합니다 .

물론 이것은 저품질 답변을 결정하기 위해 SO가 사용하는 많은 휴리스틱 중 하나 일 뿐이며 100 % 정확하다고 믿어서는 안됩니다.


"일반 단어"를 감지 할 수있는 것과 같은 방식으로 이러한 문자열을 감지 할 수 있다고 생각합니다. 패턴 매칭 일 뿐이지?

사용자가 이러한 문자열을 검색 하는 이유 는 더 큰 질문입니다. 다른 방법으로 의미없는 검색을 차단할 수 있습니다. 예를 들어 사람들 (또는 스크립트)이 찾고있는 스팸 문구가 댓글이라면 CAPTCHA를 설치하십시오.

편집 : 입력을 해석하는 또 다른 최종 실행은 입력을 약간 조절하는 것입니다. 10 초 정도마다 검색을 허용합니다. (나는 이것을 포럼 소프트웨어와 SO의 여러 곳에서 본 기억이 난다.) 이것은 sdfpjheroptuhdfj를 계속해서 검색하는 재미를 가져다 줄 것이며 동시에 검색하는 사용자를 방해하지 않을 것입니다. 그들의 물건을 찾고 있습니다.


일부 사람들이 언급했듯이 Google에는 tapoktrpasawe 또는 putjbtghguhjjjanika (물론 현재 있습니다)에 대한 히트가 없습니다. 따라서 API를 통해 빠른 Google 검색을 수행 할 수있는 방법이 있다면 다음과 같은 검색어를 버릴 수 있습니다. Google 결과가없고 제품 이름이 아닙니다. 이 작업을 원하는 이유는 완전히 다른 질문입니다. 검색 라이브러리에 대한 노력을 절약하려고합니까? "인기 검색어"에 대한 직접 리뷰를 더 의미있게 만드시겠습니까? 아니면 거대한 인터넷에있는 사람들의 설명 할 수없는 행동에 실망 했습니까? 후자라면 예방할 수있는 방법이 있더라도 그냥 놓아 두라고 조언합니다. 다른 이상한 점이 생길 것입니다.


짧은 답변-Jibberish 검색

확률 적 언어 모델이 작동합니다.

논리

단어는 일련의 문자로 구성되어 있으며, 2 개의 문자가 더 자주 모이고, 2 개의 연속 된 문자가 단어로 모이는 빈도를 모두 합산하고, 교차 임계 값을 합하면 (영어 단어 임) 적절하다고합니다. 영어 단어. 간단히 말해서,이 논리는 마르코프 체인에 의해 유명합니다 .

링크

Gibberish의 수학 및 더 나은 이해는 https://www.youtube.com/watch?v=l15C8UJu17s 비디오를 참조하십시오 . 감사 !!


소스 코드 마이닝 프로젝트에서 밀접하게 관련된 문제를 해결해야했고, 패키지가 PHP가 아닌 Python으로 작성되었지만, 여전히 유용 할 수있는 경우 여기에서 언급 할 가치가있는 것 같습니다. 패키지는 Nostril ( "Nonsense String Evaluator"용)이며 소스 코드 마이닝 중에 추출 된 문자열이 클래스 / 함수 / 변수 등인지 여부를 결정하는 데 목적이 있습니다. 식별자 또는 임의의 횡설수설. 프로그램 식별자뿐만 아니라 실제 텍스트에서도 잘 작동합니다. Nostril은 사용자 지정 TF-IDF 점수 기능 과 함께 n-gram ( Rob Neuhaus의 답변에 있는 Gibberish Detector와 유사)을 사용합니다 . 사전 훈련이되어 있으며 즉시 사용할 수 있습니다.

예 : 다음 코드,

from nostril import nonsense
real_test = ['bunchofwords', 'getint', 'xywinlist', 'ioFlXFndrInfo',
             'DMEcalPreshowerDigis', 'httpredaksikatakamiwordpresscom']
junk_test = ['faiwtlwexu', 'asfgtqwafazfyiur', 'zxcvbnmlkjhgfdsaqwerty']
for s in real_test + junk_test:
    print('{}: {}'.format(s, 'nonsense' if nonsense(s) else 'real'))

다음 출력이 생성됩니다.

bunchofwords: real
getint: real
xywinlist: real
ioFlXFndrInfo: real
DMEcalPreshowerDigis: real
httpredaksikatakamiwordpresscom: real
faiwtlwexu: nonsense
asfgtqwafazfyiur: nonsense
zxcvbnmlkjhgfdsaqwerty: nonsense

The project is on GitHub and I welcome contributions.


If the search is performed on products, you could cache their names or codes and check them against that list before quering database. Else, if your site is for english users, you can build a dictionary of strings that aren't used in the english language, like qwkfagsd. Which, and agreeing with other answer, will be more resource intensive than if not there.

참고URL : https://stackoverflow.com/questions/6297991/is-there-any-way-to-detect-strings-like-putjbtghguhjjjanika

반응형