SerialGuy/ai-vs-human
4
1import numpy as np2import pandas as pd3import textstat4import joblib5 6# Load model and vectorizer7model = joblib.load("Models/ai_detector_model.pkl")8vectorizer = joblib.load("Models/vectorizer.pkl")9 10def calculate_readability(text):11 """Calculate readability score for the text"""12 return textstat.flesch_reading_ease(text)13 14def lexical_diversity(text):15 """Compute lexical diversity = unique words / total words"""16 words = text.split()17 return len(set(words)) / len(words) if words else 018 19def sentence_length(text):20 """Compute average sentence length"""21 sentences = text.split('.')22 return sum(len(s.split()) for s in sentences) / len(sentences) if sentences else 023 24def preprocess_text(text):25 """Convert text to feature vectors (TF-IDF + readability metrics)"""26 27 # Convert input text into a DataFrame28 df_sample = pd.DataFrame({'text': [text]})29 30 # Extract additional features31 df_sample['readability'] = df_sample['text'].apply(calculate_readability)32 df_sample['lexical_diversity'] = df_sample['text'].apply(lexical_diversity)33 df_sample['sentence_length'] = df_sample['text'].apply(sentence_length)34 35 # Convert text to TF-IDF vector36 X_tfidf = vectorizer.transform(df_sample['text'])37 38 # Combine TF-IDF features with extracted features39 X_sample = np.hstack((X_tfidf.toarray(), 40 df_sample[['readability', 'lexical_diversity', 'sentence_length']].values))41 42 return X_sample43 44def predict_text(text):45 X_sample = preprocess_text(text)46 prediction = model.predict(X_sample)[0]47 confidence = model.predict_proba(X_sample)[:,1][0] 48 return prediction, confidence49 