topicModelingTickets/test.py

1699 lines
76 KiB
Python
Raw Permalink Normal View History

2017-12-08 11:06:07 +01:00
"""
2017-11-17 11:46:57 +01:00
import matplotlib
matplotlib.use('Agg')
2017-11-17 11:46:57 +01:00
import textacy
2017-11-17 11:46:57 +01:00
import numpy as np
import json
import os.path
import subprocess
from textacy import Vectorizer, viz
2017-11-17 11:46:57 +01:00
from scipy import *
2017-11-06 12:54:59 +01:00
import json
2017-11-17 11:46:57 +01:00
import draw
2017-12-08 11:06:07 +01:00
"""
import matplotlib
matplotlib.use('Agg')
2017-12-08 11:06:07 +01:00
import os
import time
from textacy import Vectorizer
from itertools import tee
2017-12-08 11:06:07 +01:00
start = time.time()
from gensim.models import Doc2Vec
from datetime import datetime
2017-12-08 11:06:07 +01:00
import textacy
FILEPATH = os.path.dirname(os.path.realpath(__file__)) + "/"
from miscellaneous import *
from ressources.iir.lda.llda import *
import numpy as np
2017-12-08 11:06:07 +01:00
import re
import draw
# http://universaldependencies.org/u/pos/
#corpus, parser = load_corpus(corpus_path="/home/jannis.grundmann/PycharmProjects/topicModelingTickets/corpi/", corpus_name="de_clean")
# array of zeros and ones interleaved
lrg = np.arange(2).reshape((2,-1)).repeat(1000000,-1).flatten()
flt = lrg[lrg==0]
flt = np.array(filter(lambda x:x==0, lrg))
lines_txt = "/home/jannis.grundmann/PycharmProjects/topicModelingTickets/corpi/corpi_vor_besprechung/labeled.txt"
labelset, corpus, labels = load_corp(lines_txt)
llda = LLDA(20, 0.001, 0.001)
llda.set_corpus(labelset, corpus, labels)
for i in range(10):
llda.inference()
phi = llda.phi()
#print(llda.vocas)
#for v, voca in enumerate(llda.vocas):
# print ','.join([voca]+[str(x) for x in llda.n_z_t[:,v]])
#print(','.join([voca] + [str(x) for x in phi[:, v]]))
################# termite plot #####################################################################
topic_labels = list(labelset)
term_labels = list(llda.vocas)
term_topic_weights = phi.transpose()
threshmin = 0.005
from scipy.stats import threshold
thresholded = threshold(term_topic_weights, threshmin=threshmin)
draw.draw_termite(thresholded, topic_labels, term_labels, save="test.png")
exit()
KBA10184_text = "wenn Sie Ihr UniAccount Passwort ändern möchten, k<>nnen Sie dies im Service Portal unter folgendem Link durchführen: https://service.tu-dortmund.de/uniaccount-passwort"
corpus = textacy.Corpus("de")
preprocess_replace_urls = textacy.preprocess.replace_urls(KBA10184_text,replace_with="URL")
print(preprocess_replace_urls)
preprocess_replace_urls = textacy.preprocess.transliterate_unicode(KBA10184_text)
print(preprocess_replace_urls)
#corpus.add_text(preprocess_replace_urls)
to_corr = "Sehr geehrtes ITMC Service Team, seit ein einiger Zeit scheint der Netzwerkanschluss eines Kollegen " \
"An das Intranet der BMP Mit der Dosennummer G1 303 04 12.05 G1 4 26-1 in Raum G1-426 nicht Mehr Zu funktionieren. " \
"Ich Wuerde Sie daher bitten diese Mail An den zustaendigen Kollegen weiterzuleiten," \
" Um Die Leitung Vielleicht Einmal Zu Pruefen. Des Weiteren haette Ich noch Eine Frage " \
"bezueglich der Moeglichkeit zur Nutzung Einer VPN Verbindung Aus unserem Intranet" \
" heraus Zu einem fremden Netzwerk. Dies ist zwar Ueber das WLAN-Netz moeglich, jedoch nicht Aus unserem Netzwerk heraus."
to_corr = "Wichtiger Hinweis: Die Information in dieser E-Mail ist vertraulich. Sie ist ausschließlich für den Adressaten bestimmt. Sollten Sie nicht der für diese E-Mail bestimmte Adressat sein, unterrichten Sie bitte den Absender und vernichten Sie diese Mail. Vielen Dank. Unbeschadet der Korrespondenz per E-Mail, sind unsere Erklärungen ausschließlich final rechtsverbindlich, wenn sie in herkömmlicher Schriftform (mit eigenhändiger Unterschrift) oder durch Übermittlung eines solchen Schriftstücks per Telefax erfolgen."
corpus.add_text(to_corr)
for doc in corpus:
for sent in doc.sents:
for tok in sent:
print(tok.text, tok.pos_, tok.dep_)
corpus.add_text("dfsaf fdsa fdsa",metadata={ "x" : "test"})
corpus.add_text("iuzizi gbjh iuzit",metadata={ "x" : "testo"})
vectorizer = Vectorizer(weighting="tf", min_df=1, max_df=1.0)
# create tuples of term_list and metadata for each doc
terms_meta_gen, terms_meta_gen_copy = tee(((doc.to_terms_list(ngrams=(1,2), as_strings=True), doc.metadata) for doc in corpus))
terms_list_gen, terms_list_gen_copy = tee((term_meta[0] for term_meta in terms_meta_gen))
doc_term_matrix = vectorizer.fit_transform(terms_list_gen)
id2term = vectorizer.id_to_term
term2id = vectorizer.vocabulary
for k,v in term2id.items():
print(k,doc_term_matrix[0,v])
#{0: 'dfsaf', 1: 'fdsa', 2: 'dfsaf fdsa', 3: 'fdsa fdsa', 4: 'iuzizi', 5: 'gbjh', 6: 'iuzit', 7: 'iuzizi gbjh', 8: 'gbjh iuzit'}
#line_gen = ( doc.metadata["x"] + " ".join([term for term in])
def gen_lines(docterm,term2id,corpus,label):
for i,doc in enumerate(corpus):
line = "[" + doc.metadata[label] + "]"
for term, id_ in term2id.items():
if doc_term_matrix[i, id_] != 0:
term = term if len(term.split()) == 1 else "_".join(term.split())
line = line + " " + term
yield line
for line in gen_lines(doc_term_matrix,term2id,corpus,"x"):
print(line)
#doc.to_terms_list(ngrams=2, as_strings=True)
# "" \
# "" \
# "" ".join(
#[term if term in id2term.values() else "" for term in terms_meta[0]]) for terms_meta in terms_meta_gen_copy)
label = "x"
#for line in line_gen:
# print(line)
#terms_meta_gen = ( (doc.to_terms_list(ngrams=2, as_strings=True),doc.metadata) for doc in corpus)
for x in terms_meta_gen:
print(x)
#terms_list_gen = (term_meta[0] for term_meta in terms_meta_gen)
for x in terms_list_gen:
print(x)
for doc in corpus:
for term in doc.to_terms_list(ngrams=2, as_strings=True):
print(type(term))
for doc in corpus:
for span in textacy.extract.ngrams(doc,2,
filter_stops=True, filter_punct=True,
filter_nums=False, include_pos=None,
exclude_pos=None, min_freq=1):
print(span.text)
ressources_path = FILEPATH + "ressources/"
path2lemmadict = ressources_path + config.get("lemmatization","pickle_file")
LEMMAS = load_obj(path2lemmadict)
path2thesaurus_dict = ressources_path + config.get("thesaurus","pickle_file")
THESAURUS = load_obj(path2thesaurus_dict)
def getFirstSynonym(word, thesaurus=THESAURUS,n=3):
for i in range(n):
try:
if word in thesaurus.keys():
return thesaurus[word]
elif word.title() in thesaurus.keys():
return thesaurus[word.title()]
elif word.lower() in thesaurus.keys():
return thesaurus[word.lower()]
else:
return word
except:
print("THESAURUSFEHLER BEI: {}".format(word))
return word
def lemmatizeWord(word,lemma_dict=LEMMAS,n=3):
for i in range(n):
try:
word = lemma_dict[word.lower()] if word.lower() in lemma_dict.keys() else word.lower()
except:
print(word)
return word
test = "Kennwort"
print(getFirstSynonym("kennwort"))
print(getFirstSynonym("Kollern"))
print(getFirstSynonym("lködjsklafd"))
2017-12-08 11:06:07 +01:00
dict = {"benutzer zum redmine hinzufuegen": 0, "sd_outlook anmeldung gestoert": 131, "sap portal \"im anderen modus geoeffnet\"": 1, "uni card": 79, "sd_verlust/antrag unicard": 2, "sd_citavi bestellung": 3, "fehlender eintrag im elektronischen telefonbuch": 4, "sd_origin_workaround": 80, "sd_kurs-angebote anmeldung": 141, "ub_drucker kopierer": 82, "sd_itmc kurse anmeldebestaetigung": 66, "sd_unicard_gesperrte unicard entsperre": 6, "ub_unicard_abholungszeiten": 7, "bd_unicard_nicht_eingeschrieben": 8, "ub_prod_namenskorrektur_student": 149, "sd_outlook_in_exchange_einbinden": 84, "sd_tu-app feedback standard": 10, "sd_account_abmelden": 77, "sd_gmx_web.de": 87, "bd_unicard_chip_defekt": 11, "sd_antrag funktionale mailadresse": 88, "sd_login tu portals english": 142, "sd_falsche_personendaten": 90, "sd_vpn_aktualisierung": 12, "ub_namensaenderung": 111, "studierendenausweis": 13, "re: elektroarbeiten fuer leitsystem 2. und 3. obergeschoss": 14, "sd_vpn_webvpn": 15, "spam ohne tu bezug": 92, "ungueltiges ticket siehe journal": 123, "sd_heirat_namensaenderung_student": 122, "sd_telefonbuch, neues system": 16, "sd_diensthandy beschaffung": 94, "sd_telefonantrag_aenderung_neuantrag": 95, "sd_uniaccount_ehemalige_passwortaenderung": 17, "sd_plotauftrag_zv": 18, "ohne betreff": 19, "wlan": 97, "sd-e-mail_adresse_funktional_beantragen": 98, "sd_unimail zu exchange": 21, "sd_citavi": 99, "transportdurchfuehung": 100, "ub_prod_neue unicard bei beschaedigung": 101, "sd_wlan passwort englisch": 22, "sd_semesterticket": 103, "sd_pruefungsamt": 104, "sd_uniaccount freischaltung verzoegert englisch": 23, "sd_uniaccount_passwortaenderung": 140, "sd_telefon (antrag: neuanschluss, umzug, aenderung erledigt)": 105, "sd_tu-app feedback_englisch": 24, "sd_uniaccount_ehemalige_studierende": 107, "ub_prod_abholung_ abholfristen_benachrichtigungen": 25, "sd_stellenausschreibung schwarzes brett": 26, "sd_tu_app_keine internetverbindung": 27, "sd_uniaccount activation englisch": 28, "sd_aktivierung uniaccount": 108, "ub_unicard_zusendung der karte moeglich?": 132, "einrichtung des eduroam netzwerks": 29, "unicard nochmal beantragen": 30, "sd_webmailer_thread-anzeige": 5, "sd_mail_als_anhang": 31, "m42_dokumentationen_zu_neuen_ous": 32, "vpn verbindung fuer unitymedia kunden": 33, "sd_beantragung_unicard": 20, "sd_unicard_defekt": 83, "sd_asknet_mitarbeiter_softwarebestellung": 34, "sd_spss_online_bestellung": 109, "sd_webmailer einrichtung weiterleitung": 9, "sd_unicard_max_laufzeit": 35, "sd_office 356 plus bestellung": 81, "vpn_ipsec_stoerung": 36, "sd_telefonbuch-eintrag_aenderung": 37, "sd_geraeteausleihe": 125, "bd_unicard_geldkarte_laden": 112, "unicard_restbetrag_auszahlung": 113, "apps_redmine_repository": 114, "windows 10": 78, "sd_antwort_phishingmail": 110, "sd_gastaufenthalter": 38, "sd_matlab lizenzdatei pc-pools": 39, "sd_wlan passwort setzen": 40, "sd_sap_initialkennwort": 41, "sd_sap_konteneinsicht_ workaround": 119, "sd_office365_asknet": 118, "bd_unicard_freigabe_beantragung": 42, "sd_internationaloffice": 43, "sd_kurs-angebote itmc": 153, "sd_asknet_und_dreamspark": 102, "cm_lsf-boss_freischaltung": 116, "sd_unicard fehlerhafte geldbuchung": 44, "sd_office 365 plus support": 45, "citavi_lizenzschluessel_nicht bekommen": 86, "sd_webmailer_threadanzeige und weiterleitung": 121, "sd_boss_notenverbuchung": 47, "sd_namensaenderung_englisch": 48, "sd_sap_freischaltung ohne passwortaenderung": 49, "sd_outlook kontakte automatische aktualisierung": 124, "sd_fk9 test": 50, "sd_sophos download": 51, "apps_dms_d.3 client installation/login d.3 funktioniert nicht": 52, "sd_sap_firefox_esr": 127, "sd_unicard_workaround_bestellung": 128, "sd_vpn anleitungen": 53, "probleme mit unicard": 89, "sd_wlan_beratung": 129, "sd_login_tu_portale": 130, "problem mit der beantragung von der unicard": 150, "sd_unicard_abholung": 54, "ub_beschaedigte unicard": 120, "sd_uniaccount_dauer freischaltung": 96, "sd_freischaltung uniaccount verzoegert": 133, "sd_unimail imap_pop3": 134, "change produktiv nehmen chn00146 - transport e01k909284": 135, "sd_bo
print(str(dict.keys()))
model = Doc2Vec.load("item_document_vectors")
nost_sim = model.most_similar("pregnant")
parser = spacy.load("de")
wtf = parser("Hallo Stefan,\r\neinmal zur Kenntnisnahme\r\nGruß Enrico\r\n \r\n \r\nSehr geehrter Herr Engelmann,\r\nes kann keine Lösung sein, auf das alte Passwort zurückzugreifen, wenn wir\r\ndienstlich aufgefordert waren es zu ändern.\r\nEben habe ich mit dem ITMC-Servive telefoniert. Mir wurde erklärt, dass\r\ndas Passwort in den Thunderbird-Kontoeinstellungen geändert werden muss\r\nund kann. Wenn ich wieder im Büro bin (leider in der vorlesungsfreien Zeit\r\nnie am Di oder Do), probiere ich aus, ob ich das selber hinbekomme.\r\nAllerdings verstehe ich nicht, warum vor dem großen Server-Absturz von\r\nneulich alles problemlos mit meinem neuen Passwort funktioniert hatte.\r\nDas Problem mit dem Einloggen in SAP war unabhängig davon und ist dank des\r\nTelefonats mit dem ITMC-Service gelöst.\r\nMit besten Grüßen, Brigitte Falkenburg\r\n \r\n \r\n> Sehr geehrte Frau Falkenburd,\r\n> ich freue mich, dass es jetzt erstmal wieder bei Ihnen funktioniert und\r\nbedanke mich für die Rückmeldung.\r\n> Ich hoffe durch Ihre Vorgehensweise kann das Problem nun auch bei\r\nanderen Kollegen gelöst werden.\r\n> mit freundlichen Grüßen\r\n> Björn Engelmann\r\n> Am 12.08.2015 um 14:47 schrieb Prof. Dr. Dr. Brigitte Falkenburg:\r\n>> Lieber Herr Engelmann, liebes ITMC Service Team,\r\n>> nachdem ich mich auch in SAP für einen Antrag auf eine Dienstreise\r\nnicht einloggen konnte, habe ich mein Passwort auf das alte Passwort\r\nzurückgesetzt und die Thunderbird-Mail funktioniert wieder! Ob das\r\nSAP-Einloggen für den Dienstreisen-Antrag nun auch funktioniert, weiß\r\nich aber erst, wenn das Passwort im System für alle Dienste geändert\r\nwurde.\r\n>> Es ist allerdings ein Unding, dass nun offenbar keine Änderung des\r\nPassworts mehr möglich ist, ohne dass diverse IT-Dienste unzugänglich\r\nwerden. Bitte überprüfen Sie im ITMC diesen Sachverhalt. Das Problem\r\nwurde erst durch den großen Systemausfall vor einigen Wochen erzeugt,\r\nvorher hatte alles reibungslos funktioniert.\r\n>> Mit freundlichem Gruß, Brigitte Falkenburg")
content ="kenntnisnahme"
2017-12-08 11:06:07 +01:00
parser = spacy.load("de")
obj1 = parser("passwort")
obj2 = parser("kennwort")
obj3 = parser("stuhl")
obj4 = parser("BOSS")
known_acro_defs = {"BOSS" : "bla bla bla", "SAP" : "lalal"}
print(textacy.extract.acronyms_and_definitions(obj4,known_acro_defs))
print(textacy.similarity.word2vec(obj1, obj2))
print(textacy.similarity.word2vec(obj1, obj3))
intab = "aeiou"
outtab = "12345"
trantab = str.maketrans(intab, outtab)
str = "this is string example....wow!!!"
print( str.translate(trantab))
import nltk, re
def truecase(text):
truecased_sents = [] # list of truecased sentences
# apply POS-tagging
tagged_sent = nltk.pos_tag([word.lower() for word in nltk.word_tokenize(text)])
# infer capitalization from POS-tags
normalized_sent = [w.capitalize() if t in ["NN","NNS"] else w for (w,t) in tagged_sent]
# capitalize first word in sentence
normalized_sent[0] = normalized_sent[0].capitalize()
# use regular expression to get punctuation right
pretty_string = re.sub(" (?=[\.,'!?:;])", "", ' '.join(normalized_sent))
return pretty_string
to_corr = "Sehr geehrtes ITMC Service Team, seit ein einiger Zeit scheint der Netzwerkanschluss eines Kollegen " \
"An das Intranet der BMP Mit der Dosennummer G1 303 04 12.05 G1 4 26-1 in Raum G1-426 nicht Mehr Zu funktionieren. " \
"Ich Wuerde Sie daher bitten diese Mail An den zustaendigen Kollegen weiterzuleiten," \
" Um Die Leitung Vielleicht Einmal Zu Pruefen. Des Weiteren haette Ich noch Eine Frage " \
"bezueglich der Moeglichkeit zur Nutzung Einer VPN Verbindung Aus unserem Intranet" \
" heraus Zu einem fremden Netzwerk. Dies ist zwar Ueber das WLAN-Netz moeglich, jedoch nicht Aus unserem Netzwerk heraus."
print(truecase(to_corr))
print("test".title())
noun_gen = textacy.fileio.read_file_lines("/home/jannis.grundmann/PycharmProjects/topicModelingTickets/ressources/nomen.txt")
noun2_gen = textacy.fileio.read_file_lines("/home/jannis.grundmann/PycharmProjects/topicModelingTickets/ressources/nomen2.txt")
nouns = []
for noun in noun_gen:
nouns.append(noun.title())
for noun in noun2_gen:
nouns.append(noun.title())
#textacy.fileio.write_file_lines((n.strip() for n in nouns),"/home/jannis.grundmann/PycharmProjects/topicModelingTickets/ressources/de_nouns.txt")
# load corpus
corpus_de_path = FILEPATH + config.get("de_corpus", "path")
2017-12-08 11:06:07 +01:00
rawCorpus_name = "de" + "_raw_ticket"
cleanCorpus_name = "de" + "_clean_ticket"
#rawCorpus, parser = load_corpus(corpus_name=rawCorpus_name, corpus_path=corpus_de_path)
#cleanCorpus, parser_ = load_corpus(corpus_name=cleanCorpus_name, corpus_path=corpus_de_path)
#for doc in rawCorpus:
# print(doc.text.split()[0:7])
2017-11-29 16:31:30 +01:00
#todo randomize corpus
2017-11-27 12:49:05 +01:00
# test von tagging zwischen cleaned und raw
2017-12-08 11:06:07 +01:00
parser = spacy.load("de")
corpus = textacy.Corpus(parser)
#rawdoc = rawCorpus.get(lambda x : x.metadata["TicketNumber"] == "INC40495")
#cleandoc = cleanCorpus.get(lambda x : x.metadata["TicketNumber"] == "INC40495")
clean = "sehr geehrte damen und herren, ich bitte um pruefung, ob und wie eine tu-email-adresse fuer einen honorarprofessor eingerichtet werden kann. herr prof. dr.-ing. klaus-guenter meng haelt seit etwa 1995 an der tu dortmund vorlesungen im bereich der satellitenkommunikation und satellitennavigation fakultaet elektrotechnik und informationstechnik . von etwa 1984 bis etwa 1988 war er auch wissenschaftlicher mitarbeiter am lehrstuhl hochfrequenztechnik der tu dortmund. seine vorlesungsthemen sind diesem lehrstuhl zugeordnet. eine eigenstaendige tu-email-adresse waere aeusserst hilfreich, um eine sinnvolle kommunikation mit studenten zu ermoeglichen und um auch andere hilfsmittel ews nutzen zu koennen. im sinne der corporate identity der tu waere das sicherlich sehr sinnvoll. die nutzung einer privaten oder geschaeftlichen email-adresse ist nicht nur aus diesen gruenden nicht gluecklich. mit freundlichen gruessen dirk schulz ------------------------------------------------------------------ pd dr.-ing. dirk schulz technische universitaet dortmund lehrstuhl fuer hochfrequenztechnik friedrich-woehler-weg 4 d-44227 dortmund tel.: 0231 755-3909 fax: 0231 755-4631 e-mail: dirk2.schulz@tu-dortmund.de mailto:dirk2.schulz@tu-dortmund.de ------------------------------------------------------------------"
raw = "Sehr geehrte Damen und Herren,\r\nich bitte um Prüfung, ob und wie eine TU-Email-Adresse für einen Honorarprofessor eingerichtet werden kann.\r\nHerr Prof. Dr.-Ing. Klaus-Günter Meng hält seit etwa 1995 an der TU Dortmund Vorlesungen im Bereich der Satellitenkommunikation und Satellitennavigation (Fakultät Elektrotechnik und Informationstechnik). Von etwa 1984 bis etwa 1988 war er auch wissenschaftlicher Mitarbeiter am Lehrstuhl Hochfrequenztechnik der TU Dortmund. Seine Vorlesungsthemen sind diesem Lehrstuhl zugeordnet.\r\nEine eigenständige TU-Email-Adresse wäre äußerst hilfreich, um eine sinnvolle Kommunikation mit Studenten zu ermöglichen und um auch andere Hilfsmittel (EWS) nutzen zu können. Im Sinne der \"Corporate Identity\" der TU wäre das sicherlich sehr sinnvoll. Die Nutzung einer privaten oder geschäftlichen Email-Adresse ist nicht nur aus diesen Gründen nicht glücklich.\r\nMit freundlichen Grüßen\r\nDirk Schulz\r\n \r\n \r\n \r\n------------------------------------------------------------------\r\n \r\n \r\nPD Dr.-Ing. Dirk Schulz\r\nTechnische Universität Dortmund\r\nLehrstuhl für Hochfrequenztechnik\r\nFriedrich-Wöhler-Weg 4\r\nD-44227 Dortmund\r\nTel.: 0231/755-3909\r\nFax: 0231/755-4631\r\nE-Mail: dirk2.schulz@tu-dortmund.de<mailto:dirk2.schulz@tu-dortmund.de>\r\n \r\n \r\n------------------------------------------------------------------"
test1 = "(Der Preis ist heiß.)"
test2 = "Der Preis ist heiß."
test3 = "Die abdichtete Regenrinne ist"
test4 = "Wir haben uns abarbeiten"
test5 = "Das Gebäude steht stabil"
test6 = "Das gebaeude steht stabil"
test7 = "Gr<EFBFBD><EFBFBD>e"
"<EFBFBD>"
ressources_path = FILEPATH + "ressources/"
path2wordsdict = ressources_path + config.get("spellchecking", "pickle_file")
WORDS = load_obj(path2wordsdict)
########################## Spellchecking ##########################################
# http://norvig.com/spell-correct.html
# http://wortschatz.uni-leipzig.de/en/download
"""
import re
def words(text): return re.findall(r'\w+', text.lower())
def P(word, N=sum(WORDS.values())):
"Probability of `word`."
return WORDS[word] / N
def correction(word):
"Most probable spelling correction for word."
return max(candidates(word), key=P)
def candidates(word):
"Generate possible spelling corrections for word."
return (known([word]) or known(edits1(word)) or known(edits2(word)) or [word])
def known(words):
"The subset of `words` that appear in the dictionary of WORDS."
return set(w for w in words if w in WORDS)
def edits1(word):
"All edits that are one edit away from `word`."
letters = 'abcdefghijklmnopqrstuvwxyz'
splits = [(word[:i], word[i:]) for i in range(len(word) + 1)]
deletes = [L + R[1:] for L, R in splits if R]
transposes = [L + R[1] + R[0] + R[2:] for L, R in splits if len(R) > 1]
replaces = [L + c + R[1:] for L, R in splits if R for c in letters]
inserts = [L + c + R for L, R in splits for c in letters]
return set(deletes + transposes + replaces + inserts)
def edits2(word):
"All edits that are two edits away from `word`."
return (e2 for e1 in edits1(word) for e2 in edits1(e1))
def autocorrectWord(word):
try:
return correction(word)
except:
return word
"""
to_corr = "------------------------ Urspr<70>ngliche Nachricht -------------------------\r\nBetreff: Universit<69>t Postfach-Quota <20>berschritten!\r\nVon: \"ITMC-ServiceDesk\" <erkj@ruc.dk>\r\nDatum: Mo, 25.04.2016, 20:18\r\nAn: heinke.kirzinger@tu-dortmund.de\r\n--------------------------------------------------------------------------\r\n\r\n Das Universit<69>t-Postfach-Quota\r\n<EFBFBD>berschritten hat die Grenze, k<>nnen\r\nSie m<>glicherweise nicht auf\r\nSenden/Empfangen e-Mails mehr. \r\n Bitte l<>schen Sie ein\r\nbeliebiges Element, das Sie nicht\r\nben<EFBFBD>tigen aus Ihrem Postfach und\r\nEntfernen der gel<65>schten Elemente\r\noder HIER ANMELDEN, damit wir die\r\nGr<EFBFBD><EFBFBD>e Ihrer Postfach.\r\n\r\nDas Amt des Inforamtion Sicherheit halten dies aktualisiert, wenn\r\nInformationen <20>ndern sollten, aber wir empfehlen allen Anwendern ihre\r\nAktualisierungen nach der erwarteten Version dieses Patches ausgef<65>hrt.\r\n\r\nMit freundlichen Gr<47><72>en\r\nIhr ITMC-SeviceDesk Team\r\n --\r\nTechnischen Universit<69>t Dortmund\r\nIT & Medien Centrum (ITMC)\r\nE-Mail: service.itmc@tu-dortmund.de\r\nInternet: itmc.tu-dortmund.de\r\n-------------------------\r\n\r\n\r\n <20> 2016, IT & Medien Centrum (ITMC)\r\n All rights reserved.\r\n\r\n"
to_correct = [
"Gr<EFBFBD><EFBFBD>en",
"ausgef<EFBFBD>hrt",
"k<EFBFBD>nnen",
"Universit<EFBFBD>t",
]
"""
#print(textacy.preprocess.unidecode(test7))
#print(textacy.preprocess.fix_bad_unicode(test7))
print(test7.encode('utf8').decode('utf8'))
print("<EFBFBD>".encode())
for elem in to_correct:
bytes = elem.replace("<EFBFBD>","ä")
#bytes = re.sub(r'<27>', "", bytes)
word = autocorrectWord(bytes)
print(word)
corpus.add_text(to_corr)
for doc in corpus:
for tok in doc:
bytes = tok.text.encode()
#text = bytes.Replace("\xef\xbf\xbd", "");
bytes = re.sub(r'\xef\xbf\xbd', "", bytes)
word = autocorrectWord(bytes.decode())
print(word)
"""
# idee autocorrect bei \xef\xbf\xbd
"""
Sehr', 'geehrte', 'Damen', 'und', 'Herren,',
['Liebes', 'ITMC-Team,', 'Leider', 'kann', 'ich', 'mich', 'nicht']
Hallo
Guten
['Lieber', 'Arbeiter:', 'Es', 'tut', 'mir', 'leid!', 'Heute']
lemmas und synonyme von : sehr, geehrt, damen, herren, liebe, hallo, guten tag/morgen/abend
"""
def cleaning(string):
# fixUnicode
string = textacy.preprocess.fix_bad_unicode(string, normalization=u'NFC')
# normalize whitespace
string = textacy.preprocess.normalize_whitespace(string)
# remove linebreaks
string = re.sub(r'[\n]', " ", string)
# replaceRockDots
string = re.sub(r'[ß]', "ss", string)
string = re.sub(r'[ö]', "oe", string)
string = re.sub(r'[ü]', "ue", string)
string = re.sub(r'[ä]', "ae", string)
string = re.sub(r'[ß]', "ss", string)
string = re.sub(r'[oe]', "ö", string)
string = re.sub(r'[ue]', "ü", string)
string = re.sub(r'[ä]', "ae", string)
return string
# fehler case sensitive pos tagging idee abgleich mit nomenliste und dann Großschreiben: geht nicht, zu viele Homonyme von sowaol nomen als auch anders
2017-12-08 11:06:07 +01:00
# fehler replaceRockdots verändert pos: bsp für adp aber fuer verb
# klammern ändern nix an pos
#
"""
corpus.add_text(test5)
corpus.add_text(test6)
#corpus.add_text(test1.lower())
#corpus.add_text(test2.lower())
test1 = corpus[0].pos_tagged_text
test2 = corpus[1].pos_tagged_text
print(test1)
print(test2)
# <class 'list'>: [[('Sehr', 'ADV'), ('geehrte', 'ADJ'), ('Damen', 'NOUN'), ('und', 'CONJ'), ('Herren', 'NOUN'), (',', 'PUNCT'), ('ich', 'PRON'), ('bitte', 'ADV'), ('um', 'ADP'), ('Prüfung', 'NOUN'), (',', 'PUNCT'), ('ob', 'SCONJ'), ('und', 'CONJ'), ('wie', 'ADV'), ('eine', 'DET'), ('TU', 'NOUN'), ('-', 'PUNCT'), ('Email', 'NOUN'), ('-', 'PUNCT'), ('Adresse', 'NOUN'), ('für', 'ADP'), ('einen', 'DET'), ('Honorarprofessor', 'NOUN'), ('eingerichtet', 'VERB'), ('werden', 'AUX'), ('kann', 'VERB'), ('.', 'PUNCT'), [('Herr', 'NOUN'), ('Prof.', 'PROPN'), ('Dr', 'PROPN'), ('.-', 'PUNCT'), ('Ing', 'PROPN'), ('.', 'PUNCT')], [('Klaus', 'PROPN'), ('-', 'PUNCT'), ('Günter', 'PROPN'), ('Meng', 'PROPN'), ('hält', 'VERB'), ('seit', 'ADP'), ('etwa', 'ADV'), ('1995', 'NUM'), ('an', 'ADP'), ('der', 'DET'), ('TU', 'NOUN'), ('Dortmund', 'PROPN'), ('Vorlesungen', 'NOUN'), ('im', 'ADP'), ('Bereich', 'NOUN'), ('der', 'DET'), ('Satellitenkommunikation', 'NOUN'), ('und', 'CONJ'), ('Satellitennavigation', 'NOUN'), ('(', 'PUNCT'), ('Fakultät', 'NOUN'), ('Elektrotechnik', 'NOUN'), ('und', 'CONJ'), ('Informationstechnik', 'NOUN'), (')', 'PUNCT'), ('.', 'PUNCT')], [('Von', 'ADP'), ('etwa', 'ADV'), ('1984', 'NUM'), ('bis', 'ADP'), ('etwa', 'ADV'), ('1988', 'NUM'), ('war', 'AUX'), ('er', 'PRON'), ('auch', 'ADV'), ('wissenschaftlicher', 'ADJ'), ('Mitarbeiter', 'NOUN'), ('am', 'ADP'), ('Lehrstuhl', 'NOUN'), ('Hochfrequenztechnik', 'NOUN'), ('der', 'DET'), ('TU', 'NOUN'), ('Dortmund', 'PROPN'), ('.', 'PUNCT')], [('Seine', 'DET'), ('Vorlesungsthemen', 'NOUN'), ('sind', 'AUX'), ('diesem', 'DET'), ('Lehrstuhl', 'NOUN'), ('zugeordnet', 'VERB'), ('.', 'PUNCT'), ('\r\n', 'SPACE')], [('Eine', 'DET'), ('eigenständige', 'ADJ'), ('TU', 'NOUN'), ('-', 'PUNCT'), ('Email', 'NOUN'), ('-', 'PUNCT'), ('Adresse', 'NOUN'), ('wäre', 'AUX'), ('äußerst', 'ADV'), ('hilfreich', 'ADJ'), (',', 'PUNCT'), ('um', 'SCONJ'), ('eine', 'DET'), ('sinnvolle', 'ADJ'), ('Kommunikation', 'NOUN'), ('mit', 'ADP'), ('Studenten', 'NOUN'), ('zu', 'PART'), ('ermöglichen', 'VERB'), ('und', 'CONJ'), ('um', 'SCONJ'), ('auch', 'ADV'), ('andere', 'ADJ'), ('Hilfsmittel', 'NOUN'), ('(', 'PUNCT'), ('EWS', 'PROPN'), (')', 'PUNCT'), ('nutzen', 'VERB'), ('zu', 'PART'), ('können', 'VERB'), ('.', 'PUNCT')], [('Im', 'ADP'), ('Sinne', 'NOUN'), ('der', 'DET'), ('"', 'PUNCT'), ('Corporate', 'PROPN'), ('Identity', 'PROPN'), ('"', 'PUNCT'), ('der', 'DET'), ('TU', 'NOUN'), ('wäre', 'AUX'), ('das', 'PRON'), ('sicherlich', 'ADV'), ('sehr', 'ADV'), ('sinnvoll', 'ADJ'), ('.', 'PUNCT')], [('Die', 'DET'), ('Nutzung', 'NOUN'), ('einer', 'DET'), ('privaten', 'ADJ'), ('oder', 'CONJ'), ('geschäftlichen', 'ADJ'), ('Email', 'NOUN'), ('-', 'PUNCT'), ('Adresse', 'NOUN'), ('ist', 'AUX'), ('nicht', 'PART'), ('nur', 'ADV'), ('aus', 'ADP'), ('diesen', 'DET'), ('Gründen', 'NOUN'), ('nicht', 'PART'), ('glücklich', 'ADJ'), ('.', 'PUNCT'), ('\r\n', 'SPACE')], [('Mit', 'ADP'), ('freundlichen', 'ADJ'), ('Grüßen', 'NOUN'), ('\r\n', 'SPACE'), ('Dirk', 'PROPN'), ('Schulz', 'PROPN'), ('\r\n\u3000\r\n\u3000\r\n\u3000\r\n', 'SPACE'), ('------------------------------------------------------------------', 'PUNCT'), ('\r\n\u3000\r\n\u3000\r\n', 'SPACE'), ('PD', 'PROPN'), ('Dr', 'PROPN'), ('.-', 'PUNCT'), ('Ing', 'PROPN'), ('.', 'PUNCT')], [('Dirk', 'PROPN'), ('Schulz', 'PROPN'), ('\r\n', 'SPACE')], [('Technische', 'ADJ'), ('Universität', 'NOUN'), ('Dortmund', 'PROPN'), ('\r\n', 'SPACE')], [('Lehrstuhl', 'NOUN'), ('für', 'ADP'), ('Hochfrequenztechnik', 'NOUN'), ('\r\n', 'SPACE'), ('Friedrich', 'PROPN'), ('-', 'PUNCT'), ('Wöhler', 'PROPN'), ('-', 'PUNCT'), ('Weg', 'NOUN'), ('4', 'NUM'), ('\r\n', 'SPACE'), ('D-44227', 'NOUN'), ('Dortmund', 'PROPN'), ('\r\n', 'SPACE'), ('Tel.', 'NOUN'), (':', 'PUNCT'), ('0231/755', 'NUM'), ('-', 'PUNCT'), ('3909', 'NUM'), ('\r\n', 'SPACE'), ('Fax', 'NOUN'), (':', 'PUNCT'), ('0231/755', 'NUM'), ('-', 'PUNCT'), ('4631', 'NUM'), ('\r\n', 'SPACE'), ('E', 'X'), ('-', 'PUNCT'), ('Mail', 'PROPN'), (':', 'PUNCT'), ('dirk2.schulz@tu-dortmund.de<mailto:dirk2.schulz@tu-dortmund.de', 'DET')], [('>', 'X'), ('
# <class 'list'>: [[('Sehr', 'ADV'), ('geehrte', 'ADJ'), ('Damen', 'NOUN'), ('und', 'CONJ'), ('Herren', 'NOUN'), (',', 'PUNCT'), ('ich', 'PRON'), ('bitte', 'ADV'), ('um', 'ADP'), ('Pruefung', 'NOUN'), (',', 'PUNCT'), ('ob', 'SCONJ'), ('und', 'CONJ'), ('wie', 'ADV'), ('eine', 'DET'), ('TU', 'NOUN'), ('-', 'PUNCT'), ('Email', 'NOUN'), ('-', 'PUNCT'), ('Adresse', 'NOUN'), ('fuer', 'VERB')('einen', 'DET'), ('Honorarprofessor', 'NOUN'), ('eingerichtet', 'VERB'), ('werden', 'AUX'), ('kann', 'VERB'), ('.', 'PUNCT')], [('Herr', 'NOUN'), ('Prof.', 'PROPN'), ('Dr', 'PROPN'), ('.-', 'PUNCT')], [('Ing', 'PROPN'), ('.', 'PUNCT')], [('Klaus', 'PROPN'), ('-', 'PUNCT'), ('Guenter', 'PROPN'), ('Meng', 'PROPN'), ('haelt', 'VERB'), ('seit', 'ADP'), ('etwa', 'ADV'), ('1995', 'NUM'), ('an', 'ADP'), ('der', 'DET'), ('TU', 'NOUN'), ('Dortmund', 'PROPN'), ('Vorlesungen', 'NOUN'), ('im', 'ADP'), ('Bereich', 'NOUN'), ('der', 'DET'), ('Satellitenkommunikation', 'NOUN'), ('und', 'CONJ'), ('Satellitennavigation', 'NOUN'), ('(', 'PUNCT'), ('Fakultaet', 'NOUN'), ('Elektrotechnik', 'NOUN'), ('und', 'CONJ'), ('Informationstechnik', 'NOUN'), (')', 'PUNCT'), ('.', 'PUNCT')], [('Von', 'ADP'), ('etwa', 'ADV'), ('1984', 'NUM'), ('bis', 'ADP'), ('etwa', 'ADV'), ('1988', 'NUM'), ('war', 'AUX'), ('er', 'PRON'), ('auch', 'ADV'), ('wissenschaftlicher', 'ADJ'), ('Mitarbeiter', 'NOUN'), ('am', 'ADP'), ('Lehrstuhl', 'NOUN'), ('Hochfrequenztechnik', 'NOUN'), ('der', 'DET'), ('TU', 'NOUN'), ('Dortmund', 'PROPN'), ('.', 'PUNCT')], [('Seine', 'DET'), ('Vorlesungsthemen', 'NOUN'), ('sind', 'AUX'), ('diesem', 'DET'), ('Lehrstuhl', 'NOUN'), ('zugeordnet', 'VERB'), ('.', 'PUNCT')], [('Eine', 'DET'), ('eigenstaendige', 'ADJ'), ('TU', 'NOUN'), ('-', 'PUNCT'), ('Email', 'NOUN'), ('-', 'PUNCT'), ('Adresse', 'NOUN'), ('waere', 'VERB'), ('aeusserst', 'ADV'), ('hilfreich', 'ADJ'), (',', 'PUNCT'), ('um', 'SCONJ'), ('eine', 'DET'), ('sinnvolle', 'ADJ'), ('Kommunikation', 'NOUN'), ('mit', 'ADP'), ('Studenten', 'NOUN'), ('zu', 'PART'), ('ermoeglichen', 'VERB'), ('und', 'CONJ'), ('um', 'SCONJ'), ('auch', 'ADV'), ('andere', 'ADJ'), ('Hilfsmittel', 'NOUN'), ('(', 'PUNCT'), ('EWS', 'PROPN'), (')', 'PUNCT'), ('nutzen', 'VERB'), ('zu', 'PART'), ('koennen', 'VERB'), ('.', 'PUNCT')], [('Im', 'ADP'), ('Sinne', 'NOUN'), ('der', 'DET'), ('"', 'PUNCT'), ('Corporate', 'PROPN'), ('Identity', 'PROPN'), ('"', 'PUNCT')], [('der', 'DET'), ('TU', 'NOUN'), ('waere', 'VERB'), ('das', 'PRON'), ('sicherlich', 'ADV'), ('sehr', 'ADV'), ('sinnvoll', 'ADJ'), ('.', 'PUNCT')], [('Die', 'DET'), ('Nutzung', 'NOUN'), ('einer', 'DET'), ('privaten', 'ADJ'), ('oder', 'CONJ'), ('geschaeftlichen', 'ADJ'), ('Email', 'NOUN'), ('-', 'PUNCT'), ('Adresse', 'NOUN'), ('ist', 'AUX'), ('nicht', 'PART'), ('nur', 'ADV'), ('aus', 'ADP'), ('diesen', 'DET'), ('Gruenden', 'NOUN'), ('nicht', 'PART'), ('gluecklich', 'ADJ'), ('.', 'PUNCT')], [('Mit', 'ADP'), ('freundlichen', 'ADJ'), ('Gruessen', 'NOUN'), ('Dirk', 'PROPN'), ('Schulz', 'PROPN'), (' ', 'SPACE'), ('------------------------------------------------------------------', 'PUNCT'), (' ', 'SPACE'), ('PD', 'PROPN'), ('Dr', 'PROPN'), ('.-', 'PUNCT'), ('Ing', 'PROPN'), ('.', 'PUNCT')], [('Dirk', 'PROPN'), ('Schulz', 'PROPN')], [('Technische', 'ADJ'), ('Universitaet', 'NOUN'), ('Dortmund', 'PROPN')], [('Lehrstuhl', 'NOUN'), ('fuer', 'ADJ'), ('Hochfrequenztechnik', 'NOUN'), ('Friedrich', 'PROPN'), ('-', 'PUNCT'), ('Woehler', 'NOUN'), ('-', 'PUNCT')], [('Weg', 'NOUN'), ('4', 'NUM')], [('D-44227', 'NOUN')], [('Dortmund', 'PROPN')], [('Tel.', 'NOUN'), (':', 'PUNCT'), ('0231/755', 'NUM'), ('-', 'PUNCT'), ('3909', 'NUM'), ('Fax', 'NOUN'), (':', 'PUNCT'), ('0231/755', 'NUM'), ('-', 'PUNCT'), ('4631', 'NUM'), ('E', 'NOUN'), ('-', 'PUNCT'), ('Mail', 'PROPN'), (':', 'PUNCT'), ('dirk2.schulz@tu-dortmund.de<mailto:dirk2.schulz@tu-dortmund.de', 'DET')], [('>', 'X'), (' ', 'SPACE')], [('------------------------------------------------------------------', 'PUNCT')]]
"""
2017-11-27 12:49:05 +01:00
2017-11-27 12:49:05 +01:00
split = 0.8
weighting = "tf"
min_df = 0
max_df = 1
ngrams = 1
n_topics = 3
top_n = 7
2017-12-08 11:06:07 +01:00
"""
split_index = int(float(len(rawCorpus)) * split)
corpus_train = rawCorpus[0:split_index]
corpus_test = rawCorpus[split_index:len(rawCorpus) - 1]
2017-11-17 11:46:57 +01:00
2017-11-27 12:49:05 +01:00
###### Initialize and train a topic model
vectorizer = Vectorizer(weighting=weighting, min_df=min_df, max_df=max_df)
terms_list = (doc.to_terms_list(ngrams=ngrams, named_entities=False, as_strings=True) for doc in corpus_train)
doc_term_matrix = vectorizer.fit_transform(terms_list)
id2term = vectorizer.__getattribute__("id_to_term")
model = textacy.tm.TopicModel("lda", n_topics=n_topics)
model.fit(doc_term_matrix)
######
2017-12-08 11:06:07 +01:00
"""
2017-11-27 12:49:05 +01:00
2017-12-08 11:06:07 +01:00
"""
2017-11-27 12:49:05 +01:00
compenents = model.model.components_
2017-11-29 16:31:30 +01:00
2017-11-27 12:49:05 +01:00
components_ : array, [n_components, n_features]
Variational parameters for topic word distribution.
Since the complete conditional for topic word distribution is a Dirichlet,
components_[i, j] can be viewed as pseudocount that represents
the number of times word j was assigned to topic i.
It can also be viewed as distribution over the words for each topic after normalization:
model.components_ / model.components_.sum(axis=1)[:, np.newaxis].
2017-12-08 11:06:07 +01:00
"""
2017-11-27 12:49:05 +01:00
2017-12-08 11:06:07 +01:00
"""
2017-11-27 12:49:05 +01:00
test_doc = corpus_test[0]
2017-11-29 16:31:30 +01:00
bla = test_doc.to_bag_of_terms(ngrams=1, named_entities=True, normalize=u'lower', lemmatize=None, lowercase=True, weighting=u'count', as_strings=False)
key_list = bla.keys()
bla_list = list(bla)
print(bla)
print(bla_list)
for k in bla.keys():
print(id2term[k])
2017-11-27 12:49:05 +01:00
2017-12-08 11:06:07 +01:00
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
ressources_path = FILEPATH + "ressources/"
path2DEstopwordlist = ressources_path + config.get("de_stopwords", "pickle_file")
DE_STOP_WORDS = load_obj(path2DEstopwordlist)
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
# load corpus
corpus_de_path = FILEPATH + config.get("de_corpus", "path")
rawCorpus_name = "de" + "_raw_ticket"
corpus, parser = load_corpus(corpus_name=rawCorpus_name, corpus_path=corpus_de_path)
2017-12-08 11:06:07 +01:00
"""
2017-11-29 16:31:30 +01:00
#parser = spacy.load("de")
#corpus = textacy.Corpus(parser)
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
testtxt = "Sehr geehrtes ITMC Service Team,\r\n\r\nseit ein einiger Zeit scheint der Netzwerkanschluss eines Kollegen" \
" an das Intranet der BMP mit der Dosennummer G1 303/04/12.05 (G1 4 26-1) in Raum G1-426 nicht mehr zu funktionieren. " \
"\r\nIch würde Sie daher bitten diese Mail an den zuständigen Kollegen weiterzuleiten, um die Leitung vielleicht einmal zu Prüfen.\r\n\r\n" \
"Des Weiteren hätte ich noch eine Frage bezüglich der Möglichkeit zur Nutzung einer VPN Verbindung aus" \
" unserem Intranet heraus zu einem fremden Netzwerk. Dies ist zwar über das WLAN-Netz möglich, jedoch nicht " \
"aus unserem Netzwerk heraus. Vielleicht können Sie mir mitteilen an welchen Kollegen ich mich bezüglich" \
" dieses Problem wenden kann.\r\n\r\nBei Rückfragen stehe ich gerne zur Verfügung!\r\n\r\nBeste Grüße," \
"\r\n\r\nNicolas Rauner\r\n\r\nLS Biomaterialien und Polymerwissenschaften\r\nFakultät Bio- und Chemieingenieurwesen\r\nTU Dortmund" \
" \r\nD-44227 Dortmund\r\n\r\nTel: + 49-(0)231 / 755 - 3015\r\nFax: + 49-(0)231 / 755 - 2480\r\n\r\nwww.ls-bmp.de <http://www.ls-bmp.de/>"
#corpus.add_text(testtxt)
2017-11-27 12:49:05 +01:00
2017-12-08 11:06:07 +01:00
"""
2017-11-29 16:31:30 +01:00
term_dict_w_stop = {}
term_dict_wo_stop = {}
footings = ["gruss", "grusse", "gruesse", "gruessen", "grusses"]
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
for doc in corpus:
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
tokens = [tok for tok in doc]
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
# footer raus
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
for i,tok in enumerate(tokens):
text = tok.text
text = re.sub(r'[ß]', "ss", text)
text = re.sub(r'[ö]', "oe", text)
text = re.sub(r'[ü]', "ue", text)
text = re.sub(r'[ä]', "ae", text)
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
for gr in footings:
if gr in text.lower():
tokens = tokens[0:i]
#print(tokens)
break
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
for i,tok in enumerate(tokens):
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
if tok.is_space or tok.is_punct or tok.like_url or tok.like_email:
continue
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
if i is not 0:
#text = tok.text if tokens[i-1].pos_ is not "NUM" else tok.text+" "+tokens[i-1].text
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
if tokens[i-1].like_num:
text = tokens[i - 1].text + " " + tok.text
else:
text = tok.text
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
else:
text = tok.text
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
# replaceRockDots
text = re.sub(r'[ß]', "ss", text)
text = re.sub(r'[ö]', "oe", text)
text = re.sub(r'[ü]', "ue", text)
text = re.sub(r'[ä]', "ae", text)
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
if text not in term_dict_w_stop.keys():
term_dict_w_stop[text] = 1
else:
term_dict_w_stop[text] += 1
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
if text.lower() not in DE_STOP_WORDS:
if text not in term_dict_wo_stop.keys():
term_dict_wo_stop[text] = 1
else:
term_dict_wo_stop[text] += 1
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
term_dict_sorted = sort_dictionary(term_dict_w_stop)
term_dict_wo_sorted = sort_dictionary(term_dict_wo_stop)
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
split_value = 0.2
from_ = int((1-split_value) * float(len(term_dict_sorted))) #1-splt
to_ = len(term_dict_sorted)
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
#logprint(term_dict_sorted[from_: to_])
#logprint("\n")
#logprint(term_dict_wo_sorted[from_: to_])
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
for elem in term_dict_sorted:
logprint(elem)
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
logprint("\n")
logprint("\n")
logprint("\n")
logprint("\n")
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
for elem in term_dict_wo_sorted:
logprint(elem)
2017-11-27 12:49:05 +01:00
2017-12-08 11:06:07 +01:00
2017-11-29 16:31:30 +01:00
"""
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
2017-11-27 12:49:05 +01:00
2017-11-29 16:31:30 +01:00
2017-12-08 11:06:07 +01:00
end = time.time()
print("\n\n\nTime Elapsed Test:{0}\n\n".format(end - start))
2017-11-29 16:31:30 +01:00
2017-12-08 11:06:07 +01:00
"""
2017-11-29 16:31:30 +01:00
2017-12-08 11:06:07 +01:00
#.txt löiste reveersen
2017-11-29 16:31:30 +01:00
2017-12-08 11:06:07 +01:00
in_path= "/home/jannis.grundmann/PycharmProjects/topicModelingTickets/log/terms_without_stop.txt"
out_path= "/home/jannis.grundmann/PycharmProjects/topicModelingTickets/log/terms_without_stopwords.txt"
2017-11-29 16:31:30 +01:00
2017-12-08 11:06:07 +01:00
gen=reversed(list(open(in_path)))
2017-11-29 16:31:30 +01:00
2017-12-08 11:06:07 +01:00
textacy.fileio.write_file_lines(gen,out_path)
"""
2017-11-29 16:31:30 +01:00
2017-11-27 12:49:05 +01:00
"""