# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3 (ipykernel)
#     language: python
#     name: python3
# ---

import pandas as pd
import json
from sklearn.feature_extraction.text import CountVectorizer

# Lade die ersten 10.000 Rezensionen
f = open('data/yelp_academic_dataset_review.json')
js = []
for i in range(10000):
    js.append(json.loads(f.readline()))
f.close()
review_df = pd.DataFrame(js)


# +
# Erzeuge Merkmaltransformatoren für Unigramme, Bigramme und Trigramme.
# Bei der Standardeinstellung werden Wörter mit einem Zeichen ignoriert. Dies ist in
# der Praxis hilfreich, da nicht informative Wörter ausgelassen werden. Wir beziehen
# sie jedoch zu Illustrationszwecken ausdrücklich in dieses Beispiel mit ein.

bow_converter = CountVectorizer(token_pattern = '(?u)\\b\\w+\\b')
bigram_converter = CountVectorizer(ngram_range=(2,2),
                                  token_pattern = '(?u)\\b\\w+\\b')
trigram_converter = CountVectorizer(ngram_range=(3,3),
                                  token_pattern = '(?u)\\b\\w+\\b')

# Passe die Transformatoren an und prüfe die Größe der Vokabulare

bow_converter.fit(review_df['text'])
words = bow_converter.get_feature_names()
bigram_converter.fit(review_df['text'])
bigrams = bigram_converter.get_feature_names()
trigram_converter.fit(review_df['text'])
trigrams = trigram_converter.get_feature_names()

# -

print(len(words),len(bigrams), len(trigrams))

# Wirf einen Blick auf die n-Gramme selbst.
words[:10]

bigrams[-10:]

trigrams[0:10]

trigrams[-10:]

# +
# Stemmer


import nltk
stemmer = nltk.stem.porter.PorterStemmer()
# -

stemmer.stem('flowers')

stemmer.stem('gone')

stemmer.stem('zeroes')

stemmer.stem('goes')

# Funktion spaCy
import spacy
# Lade Sprachmodell
nlp = spacy.load('en_core_web_sm')

# Wir können eine Pandas-Reihe von NLP-Variablen aus spaCy erstellen
doc_df = review_df['text'].apply(nlp)

# spaCy liefert uns fein unterschiedene Wortarten mit (.pos_) und grob
# unterschiedene Wortarten mit (.tag_)
for doc in doc_df[4]:
    print([doc.text, doc.pos_, doc.tag_])

# spaCy nimmt für uns auch eine einfache Substantivprüfung vor.
print([chunk for chunk in doc_df[4].noun_chunks])

# !pip3 install textblob

# Wir können dieselben MErkmalstransformationen mit Textblob machen
from textblob import TextBlob

# Der voreingestellte Tagger in TextBlob verwendet den PatternTagger, was für unser Beispiel in Ordnung ist. Man
# kann auch den NLTK-TAgger auswählen, der für unvollständige Sätze besser funktioniert.
blob_df = review_df['text'].apply(TextBlob)

blob_df[4].tags

# !python3 -m textblob.download_corpora

print([np for np in blob_df[4].noun_phrases])



StarcoderdataJupyterScriptsDedupFiltered