From 9f23e0da6767a6e781c206d728fda64a4df5b50a Mon Sep 17 00:00:00 2001 From: nobleaustine Date: Wed, 14 Feb 2024 00:03:10 +0530 Subject: [PATCH 1/2] readme updated, xrange fixed, gib_detect.py modified as commandline --- README.rst => README.md | 81 ++++++++----------- __pycache__/gib_detect_train.cpython-312.pyc | Bin 0 -> 3458 bytes gib_detect.py | 18 +++-- gib_detect_train.py | 6 +- gib_model.pki | Bin 0 -> 6713 bytes sample.png | Bin 0 -> 13506 bytes 6 files changed, 50 insertions(+), 55 deletions(-) rename README.rst => README.md (73%) create mode 100644 __pycache__/gib_detect_train.cpython-312.pyc create mode 100644 gib_model.pki create mode 100644 sample.png diff --git a/README.rst b/README.md similarity index 73% rename from README.rst rename to README.md index 4a69007..0f79532 100644 --- a/README.rst +++ b/README.md @@ -1,47 +1,34 @@ -Overview -======== - -A sample program I wrote to detect gibberish. It uses a 2 character markov chain. - -http://en.wikipedia.org/wiki/Markov_chain - -This is a nice (IMO) answer to this guys question on stackoverflow. -http://stackoverflow.com/questions/6297991/is-there-any-way-to-detect-strings-like-putjbtghguhjjjanika/6298040#comment-7360747 - -Usage -===== - -First train the model: - -python gib_detect_train.py - -Then try it on some sample input - -python gib_detect.py - -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 - -How it works -============ -The markov chain first 'trains' or 'studies' a few MB of English text, recording how often characters appear next to each other. Eg, given the text "Rob likes hacking" it sees Ro, ob, o[space], [space]l, ... It just counts these pairs. After it has finished reading through the training data, it normalizes the counts. Then each character has a probability distribution of 27 followup character (26 letters + space) following the given initial. - -So then given a string, it measures the probability of generating that string according to the summary by just multiplying out the probabilities of the adjacent pairs of characters in that string. EG, for that "Rob likes hacking" string, it would compute prob['r']['o'] * prob['o']['b'] * prob['b'][' '] ... This probability then measures the amount of 'surprise' assigned to this string according the data the model observed when training. If there is funny business with the input string, it will pass through some pairs with very low counts in the training phase, and hence have low probability/high surprise. - -I then look at the amount of surprise per character for a few known good strings, and a few known bad strings, and pick a threshold between the most surprising good string and the least surprising bad string. Then I use that threshold whenever to classify any new piece of text. - -Peter Norvig, the director of Research at Google, has this nice talk about "The unreasonable effectiveness of data" here, http://www.youtube.com/watch?v=9vR8Vddf7-s. This insight is really not to try to do something complicated, just write a small program that utilizes a bunch of data and you can do cool things. - +# GIBBERISH-DETECTOR + +A program to check if a sentence is gibberish or not using simple markov chain + +## 1. Getting Started + +Clone the repo: + + ```bash + git clone https://github.com/rrenaud/Gibberish-Detector.git + ``` +Train the model: + +``` +python gib_detect_train.py +``` +Run the model: + +``` +python gib_detect.py +``` + +## 2. How it works + +The markov chain first 'trains' or 'studies' a few MB of English text, recording how often characters appear next to each other. Eg, given the text "Rob likes hacking" it sees Ro, ob, o[space], [space]l, ... It just counts these pairs. After it has finished reading through the training data, it normalizes the counts. Then each character has a probability distribution of 27 followup character (26 letters + space) following the given initial. + +So then given a string, it measures the probability of generating that string according to the summary by just multiplying out the probabilities of the adjacent pairs of characters in that string. EG, for that "Rob likes hacking" string, it would compute prob['r']['o'] * prob['o']['b'] * prob['b'][' '] ... This probability then measures the amount of 'surprise' assigned to this string according the data the model observed when training. If there is funny business with the input string, it will pass through some pairs with very low counts in the training phase, and hence have low probability/high surprise. + +I then look at the amount of surprise per character for a few known good strings, and a few known bad strings, and pick a threshold between the most surprising good string and the least surprising bad string. Then I use that threshold whenever to classify any new piece of text. + +Peter Norvig, the director of Research at Google, has this nice talk about "The unreasonable effectiveness of data" here, http://www.youtube.com/watch?v=9vR8Vddf7-s. This insight is really not to try to do something complicated, just write a small program that utilizes a bunch of data and you can do cool things. + +![sample](/sample.png) + diff --git a/__pycache__/gib_detect_train.cpython-312.pyc b/__pycache__/gib_detect_train.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d471e32fa93b7fa2eda2918dfcec1c87943a4cc1 GIT binary patch literal 3458 zcmb7GU2GHC6~1?7?2Lb7=Z7|d?M?`km_QO57T8~85&|J?SQb{hi@J>_o{2q)J>$%b z^W)l*yXtBkNQF^QF(O?V?W)a+R-1=?Kc}o)>ntkfIV~=gv zs%oz_XO7Rk_uO;tIp;g`mB-^mFuu6=mG}v8eS%EB4!y^1*)&Et6-qHsmeEDEqs$lPdhH$NT{#EEc3 znw*NpWF?`3d*7s3%mJQ{?D8r$yTiKYVbdnh65U@@X#T=<>hNn;xEEA|C$nRB77(^fJhP0stdXk*;+(=O=8h(iE zXs_n|&+#pc(c%jXnrD7P&*FeBdDuz_5;mC&t9-1I15u8j&_$KAZivKEC5JyDJ{V{; zz?gSt*i>E)iv}GPWrLYiBsstsST=CfU?-#~s1OCirs=$@YYgm!RN_=}XNFBC$EhvA z`{2>u1o98`uMGNo<9GA^YpKlH4gap(^m1oDa_8_$N3p$og)g@Emi&EN2-}WiZI8Xa z>*0lPE|O0a-dVYL_x-h9y(Mp7iS7F*4GVTOJ81kcXb-YD1YC8H3o~nR577Fc)T*o+ z98?#O>P6PoE(tdls}NsQ%RHq!^VWof|20n;^6Xt6=sj~fD9J5x(050H49^l?pC0*orPLpEss91q~UIR&73Qd6os$ArrkTgs- zj7#AjeNKNuE?EVeQIZWSia=yA$(sy-IUVD5!>&hEQHvx!1ewiF(i5MO3~F|KG~iPq zbVwy&sFL(F7$q*sCRP}9T+s}NC?{f~%Il(Gn}{l)j@A+}g8{`6z#=7VH1jiIg7mT` zk>)cNSCw%%Sdz)E3BXlH1?kL&qaK0TU1V7tvKe5GbuEsT*xi}nQzz;@x*EI} zdE`01;$MEL;Jg^@D!Z~)QiNB)u3iw~Oi7x<|6DYrf&kFp#HqKpPixSYbZZc>NL74!jIGm)8O4Z-9zH0&}ur)h%AH6)!R zsrcL=?R^ew@MQ;k>d^5Lf|ee%S~~f><7c2o!Xj6z1CG=|`7H2l^%Eixt=_|5*S@tp8n)esk_65(T4K_gWxP8}8ES$)lEqKfFD^>vVvBr=`cq%p?Zc7)x3L7uPuJsIy`?at5JR^KQE zPW{O>aCY(b1Wn_Q>c d{>(T&Iu||?P?+vofe*-Qd9FhP4 literal 0 HcmV?d00001 diff --git a/gib_detect.py b/gib_detect.py index d59d911..5e235b5 100644 --- a/gib_detect.py +++ b/gib_detect.py @@ -2,11 +2,19 @@ import pickle import gib_detect_train - +print(" ") +print(" GIBBBERISH-DETECTOR") +print(" ") model_data = pickle.load(open('gib_model.pki', 'rb')) - -while True: - l = raw_input() +check = 1 +while check == 1: + l = str(input("Enter text: ")) model_mat = model_data['mat'] threshold = model_data['thresh'] - print gib_detect_train.avg_transition_prob(l, model_mat) > threshold + if (gib_detect_train.avg_transition_prob(l, model_mat) > threshold) == True: + print("The text is not gibberish") + else: + print("The text is gibberish") + print(" ") + check = int(input("Press 1 continue: ")) + print(" ") \ No newline at end of file diff --git a/gib_detect_train.py b/gib_detect_train.py index 11fa8f1..8fd3270 100644 --- a/gib_detect_train.py +++ b/gib_detect_train.py @@ -26,7 +26,7 @@ def train(): # prior or smoothing factor. This way, if we see a character transition # live that we've never observed in the past, we won't assume the entire # string has 0 probability. - counts = [[10 for i in xrange(k)] for i in xrange(k)] + counts = [[10 for i in range(k)] for i in range(k)] # Count transitions from big text file, taken # from http://norvig.com/spell-correct.html @@ -41,7 +41,7 @@ def train(): # http://squarecog.wordpress.com/2009/01/10/dealing-with-underflow-in-joint-probability-calculations/ for i, row in enumerate(counts): s = float(sum(row)) - for j in xrange(len(row)): + for j in range(len(row)): row[j] = math.log(row[j] / s) # Find the probability of generating a few arbitrarily choosen good and @@ -72,4 +72,4 @@ def avg_transition_prob(l, log_prob_mat): - + \ No newline at end of file diff --git a/gib_model.pki b/gib_model.pki new file mode 100644 index 0000000000000000000000000000000000000000..cf3dc3dc2c59370f79421f8e3051b919d39ffd68 GIT binary patch literal 6713 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 B7Igps literal 0 HcmV?d00001 diff --git a/sample.png b/sample.png new file mode 100644 index 0000000000000000000000000000000000000000..caeb81b463321011127aee5c3b86a87dcd99f84f GIT binary patch literal 13506 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 cKbU918Z`f#c(r@k-)|F1iOY(WiRk Date: Wed, 14 Feb 2024 00:06:34 +0530 Subject: [PATCH 2/2] __pycache__ removed --- __pycache__/gib_detect_train.cpython-312.pyc | Bin 3458 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 __pycache__/gib_detect_train.cpython-312.pyc diff --git a/__pycache__/gib_detect_train.cpython-312.pyc b/__pycache__/gib_detect_train.cpython-312.pyc deleted file mode 100644 index d471e32fa93b7fa2eda2918dfcec1c87943a4cc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3458 zcmb7GU2GHC6~1?7?2Lb7=Z7|d?M?`km_QO57T8~85&|J?SQb{hi@J>_o{2q)J>$%b z^W)l*yXtBkNQF^QF(O?V?W)a+R-1=?Kc}o)>ntkfIV~=gv zs%oz_XO7Rk_uO;tIp;g`mB-^mFuu6=mG}v8eS%EB4!y^1*)&Et6-qHsmeEDEqs$lPdhH$NT{#EEc3 znw*NpWF?`3d*7s3%mJQ{?D8r$yTiKYVbdnh65U@@X#T=<>hNn;xEEA|C$nRB77(^fJhP0stdXk*;+(=O=8h(iE zXs_n|&+#pc(c%jXnrD7P&*FeBdDuz_5;mC&t9-1I15u8j&_$KAZivKEC5JyDJ{V{; zz?gSt*i>E)iv}GPWrLYiBsstsST=CfU?-#~s1OCirs=$@YYgm!RN_=}XNFBC$EhvA z`{2>u1o98`uMGNo<9GA^YpKlH4gap(^m1oDa_8_$N3p$og)g@Emi&EN2-}WiZI8Xa z>*0lPE|O0a-dVYL_x-h9y(Mp7iS7F*4GVTOJ81kcXb-YD1YC8H3o~nR577Fc)T*o+ z98?#O>P6PoE(tdls}NsQ%RHq!^VWof|20n;^6Xt6=sj~fD9J5x(050H49^l?pC0*orPLpEss91q~UIR&73Qd6os$ArrkTgs- zj7#AjeNKNuE?EVeQIZWSia=yA$(sy-IUVD5!>&hEQHvx!1ewiF(i5MO3~F|KG~iPq zbVwy&sFL(F7$q*sCRP}9T+s}NC?{f~%Il(Gn}{l)j@A+}g8{`6z#=7VH1jiIg7mT` zk>)cNSCw%%Sdz)E3BXlH1?kL&qaK0TU1V7tvKe5GbuEsT*xi}nQzz;@x*EI} zdE`01;$MEL;Jg^@D!Z~)QiNB)u3iw~Oi7x<|6DYrf&kFp#HqKpPixSYbZZc>NL74!jIGm)8O4Z-9zH0&}ur)h%AH6)!R zsrcL=?R^ew@MQ;k>d^5Lf|ee%S~~f><7c2o!Xj6z1CG=|`7H2l^%Eixt=_|5*S@tp8n)esk_65(T4K_gWxP8}8ES$)lEqKfFD^>vVvBr=`cq%p?Zc7)x3L7uPuJsIy`?at5JR^KQE zPW{O>aCY(b1Wn_Q>c d{>(T&Iu||?P?+vofe*-Qd9FhP4