Compare commits
8 commits
88717a1371
...
db471d5559
Author | SHA1 | Date | |
---|---|---|---|
OneNewDev | db471d5559 | ||
OneNewDev | 2dd21cc80d | ||
OneNewDev | cf76cbca55 | ||
OneNewDev | 73708fffd8 | ||
OneNewDev | 760dd97855 | ||
OneNewDev | c271462e93 | ||
OneNewDev | 96c8c49030 | ||
OneNewDev | b55a2543e6 |
41
exclude.py
41
exclude.py
|
@ -1,6 +1,19 @@
|
||||||
EXCLUDED_WORDS = {
|
EXCLUDED_WORDS = {
|
||||||
# Deutsche wörter
|
# Sehr häufig vorkommende Tags
|
||||||
|
# "aktualisiert",
|
||||||
|
# "behoben",
|
||||||
|
# "datei",
|
||||||
|
# "dateien",
|
||||||
|
# "erschienen",
|
||||||
|
# "neue",
|
||||||
|
# "version",
|
||||||
|
# "versionen",
|
||||||
|
# "veröffentlicht",
|
||||||
|
# "installieren",
|
||||||
|
# "deinstallieren",
|
||||||
|
# Deutsche Wörter
|
||||||
"aber",
|
"aber",
|
||||||
|
"aktiv",
|
||||||
"alle",
|
"alle",
|
||||||
"als",
|
"als",
|
||||||
"am",
|
"am",
|
||||||
|
@ -9,15 +22,20 @@ EXCLUDED_WORDS = {
|
||||||
"auf",
|
"auf",
|
||||||
"aus",
|
"aus",
|
||||||
"bei",
|
"bei",
|
||||||
|
"beim",
|
||||||
|
"bereits",
|
||||||
"bis",
|
"bis",
|
||||||
|
"bist",
|
||||||
"chf",
|
"chf",
|
||||||
"dabei",
|
"dabei",
|
||||||
"dafür",
|
"dafür",
|
||||||
"damit",
|
"damit",
|
||||||
"dank",
|
"dank",
|
||||||
|
"dann",
|
||||||
"das",
|
"das",
|
||||||
"dass",
|
"dass",
|
||||||
"davon",
|
"davon",
|
||||||
|
"dazu",
|
||||||
"deine",
|
"deine",
|
||||||
"deiner",
|
"deiner",
|
||||||
"dem",
|
"dem",
|
||||||
|
@ -27,6 +45,9 @@ EXCLUDED_WORDS = {
|
||||||
"die",
|
"die",
|
||||||
"diese",
|
"diese",
|
||||||
"diesem",
|
"diesem",
|
||||||
|
"diesen",
|
||||||
|
"dieser",
|
||||||
|
"dieses",
|
||||||
"dir",
|
"dir",
|
||||||
"doch",
|
"doch",
|
||||||
"dort",
|
"dort",
|
||||||
|
@ -46,8 +67,11 @@ EXCLUDED_WORDS = {
|
||||||
"euch",
|
"euch",
|
||||||
"euro",
|
"euro",
|
||||||
"für",
|
"für",
|
||||||
|
"gegen",
|
||||||
"gibt",
|
"gibt",
|
||||||
|
"habe",
|
||||||
"haben",
|
"haben",
|
||||||
|
"habt",
|
||||||
"hat",
|
"hat",
|
||||||
"heute",
|
"heute",
|
||||||
"hier",
|
"hier",
|
||||||
|
@ -60,8 +84,10 @@ EXCLUDED_WORDS = {
|
||||||
"in",
|
"in",
|
||||||
"ins",
|
"ins",
|
||||||
"ist",
|
"ist",
|
||||||
|
"ja",
|
||||||
"jetzt",
|
"jetzt",
|
||||||
"kann",
|
"kann",
|
||||||
|
"keine",
|
||||||
"konnte",
|
"konnte",
|
||||||
"man",
|
"man",
|
||||||
"mehr",
|
"mehr",
|
||||||
|
@ -73,8 +99,10 @@ EXCLUDED_WORDS = {
|
||||||
"mit",
|
"mit",
|
||||||
"morgen",
|
"morgen",
|
||||||
"nach",
|
"nach",
|
||||||
|
"nein",
|
||||||
"nicht",
|
"nicht",
|
||||||
"noch",
|
"noch",
|
||||||
|
"nun",
|
||||||
"nur",
|
"nur",
|
||||||
"oder",
|
"oder",
|
||||||
"ohne",
|
"ohne",
|
||||||
|
@ -85,6 +113,7 @@ EXCLUDED_WORDS = {
|
||||||
"sich",
|
"sich",
|
||||||
"sie",
|
"sie",
|
||||||
"sind",
|
"sind",
|
||||||
|
"soll",
|
||||||
"um",
|
"um",
|
||||||
"und",
|
"und",
|
||||||
"uns",
|
"uns",
|
||||||
|
@ -95,6 +124,10 @@ EXCLUDED_WORDS = {
|
||||||
"vor",
|
"vor",
|
||||||
"war",
|
"war",
|
||||||
"was",
|
"was",
|
||||||
|
"weil",
|
||||||
|
"welche",
|
||||||
|
"welcher",
|
||||||
|
"welches",
|
||||||
"wenig",
|
"wenig",
|
||||||
"weniger",
|
"weniger",
|
||||||
"wenn",
|
"wenn",
|
||||||
|
@ -110,10 +143,12 @@ EXCLUDED_WORDS = {
|
||||||
"zu",
|
"zu",
|
||||||
"zum",
|
"zum",
|
||||||
"zur",
|
"zur",
|
||||||
|
"zwei",
|
||||||
"über",
|
"über",
|
||||||
# Englische wörter
|
# Englische Wörter
|
||||||
"about",
|
"about",
|
||||||
"and",
|
"and",
|
||||||
|
"before",
|
||||||
"default",
|
"default",
|
||||||
"i",
|
"i",
|
||||||
"in",
|
"in",
|
||||||
|
@ -122,11 +157,13 @@ EXCLUDED_WORDS = {
|
||||||
"no",
|
"no",
|
||||||
"of",
|
"of",
|
||||||
"or",
|
"or",
|
||||||
|
"previous",
|
||||||
"that",
|
"that",
|
||||||
"the",
|
"the",
|
||||||
"this",
|
"this",
|
||||||
"to",
|
"to",
|
||||||
"will",
|
"will",
|
||||||
|
"with",
|
||||||
"yes",
|
"yes",
|
||||||
"you",
|
"you",
|
||||||
"your",
|
"your",
|
||||||
|
|
38
tagger.py
38
tagger.py
|
@ -37,7 +37,7 @@ class FileScanner(HTMLParser):
|
||||||
def scan_file(self):
|
def scan_file(self):
|
||||||
# Datei einlesen
|
# Datei einlesen
|
||||||
content = read_file(self.file)
|
content = read_file(self.file)
|
||||||
# HTMLParser aufrufen um HTML-Syntax-Elemente zu entfernen.
|
# HTMLParser aufrufen, um HTML-Syntax-Elemente zu entfernen.
|
||||||
self.feed(content)
|
self.feed(content)
|
||||||
|
|
||||||
words_with_usage = {}
|
words_with_usage = {}
|
||||||
|
@ -52,7 +52,7 @@ class FileScanner(HTMLParser):
|
||||||
title_words = set(title.split('-'))
|
title_words = set(title.split('-'))
|
||||||
for word in words:
|
for word in words:
|
||||||
# Verschiedene Zeichen vom Anfang und Ende der Wörter entfernen.
|
# Verschiedene Zeichen vom Anfang und Ende der Wörter entfernen.
|
||||||
tag_name = word.strip(".,:;!?\"'()«»")
|
tag_name = word.strip(".,:;!?\"'()-„“«» ")
|
||||||
# Leere Wörter ignorieren
|
# Leere Wörter ignorieren
|
||||||
if not tag_name:
|
if not tag_name:
|
||||||
continue
|
continue
|
||||||
|
@ -77,12 +77,15 @@ class FileScanner(HTMLParser):
|
||||||
# Die Anzahl der Großbuchstaben in dem originalen Wort zählen ...
|
# Die Anzahl der Großbuchstaben in dem originalen Wort zählen ...
|
||||||
upper_letters_count = len(_UPPER_CHECK.findall(tag_name))
|
upper_letters_count = len(_UPPER_CHECK.findall(tag_name))
|
||||||
# ... und die Bewertung entsprechen der Anzahl verbessern.
|
# ... und die Bewertung entsprechen der Anzahl verbessern.
|
||||||
score += upper_letters_count * 5
|
score += upper_letters_count * 10
|
||||||
# Die Bewertung für das Wort speichern.
|
# Die Bewertung leicht erhöhen, wenn ein Bindestrich im Wort enthalten ist.
|
||||||
# Wenn das Wort bereits eine Bewertung besitzt werden die beiden Bewertungen zusammen gerechnet.
|
if '-' in word:
|
||||||
|
score += 1
|
||||||
if word not in words_with_usage:
|
if word not in words_with_usage:
|
||||||
|
# Die Bewertung für das Wort speichern.
|
||||||
words_with_usage[word] = Tag(name=tag_name, score=score)
|
words_with_usage[word] = Tag(name=tag_name, score=score)
|
||||||
else:
|
else:
|
||||||
|
# Wenn das Wort bereits eine Bewertung besitzt, werden die beiden Bewertungen zusammen gerechnet.
|
||||||
words_with_usage[word].score += score
|
words_with_usage[word].score += score
|
||||||
|
|
||||||
link_words = []
|
link_words = []
|
||||||
|
@ -90,11 +93,14 @@ class FileScanner(HTMLParser):
|
||||||
# Eventuelle URL-codierte Zeichen in die eigentlichen Zeichen umwandeln. (z.B. %2F -> /)
|
# Eventuelle URL-codierte Zeichen in die eigentlichen Zeichen umwandeln. (z.B. %2F -> /)
|
||||||
link = unquote_plus(link)
|
link = unquote_plus(link)
|
||||||
# Link-Teile in einzelne Wörter aufteilen
|
# Link-Teile in einzelne Wörter aufteilen
|
||||||
words += re.split(r'[/\-_#.?&=]', link)
|
link_words += re.split(r'[/\-_#.?&=]', link)
|
||||||
for link_word in link_words:
|
for link_word in link_words:
|
||||||
|
# Alle Buchstaben verkleinern
|
||||||
link_word = link_word.lower()
|
link_word = link_word.lower()
|
||||||
|
# Wenn ein Wort aus dem Text auch in einem Link vorkommt, wird die Bewertung erhöht.
|
||||||
|
# Somit kann verhindert werden, dass Link-Bestandteile als Tags vorgeschlagen werden (z.B. E7xcsFpR).
|
||||||
if link_word in words_with_usage:
|
if link_word in words_with_usage:
|
||||||
words_with_usage[link_word] += 10
|
words_with_usage[link_word].score += 10
|
||||||
|
|
||||||
# Die Wörter nach ihrer Bewertung sortieren
|
# Die Wörter nach ihrer Bewertung sortieren
|
||||||
return sorted(words_with_usage.values(), key=lambda tag: tag.score, reverse=True)
|
return sorted(words_with_usage.values(), key=lambda tag: tag.score, reverse=True)
|
||||||
|
@ -110,23 +116,25 @@ class FileScanner(HTMLParser):
|
||||||
break
|
break
|
||||||
|
|
||||||
def handle_data(self, data):
|
def handle_data(self, data):
|
||||||
# Den Text innerhalb eines HTML-Elements mit einbeziehen.
|
# Den Inhalt des aktuellen HTML-Tags ignorieren, wenn dieser auf der Liste der ausgeschlossenen HTML-Tags steht.
|
||||||
if self._current_html_tag in EXCLUDED_HTML_TAGS:
|
if self._current_html_tag in EXCLUDED_HTML_TAGS:
|
||||||
return
|
return
|
||||||
|
|
||||||
data = _LINK_PATTERN.sub(self._link_result, data)
|
# Links aus dem HTML-Text extrahieren und entfernen
|
||||||
|
data = _LINK_PATTERN.sub(self._link_replace, data)
|
||||||
|
# Den restlichen Text (ohne Links) innerhalb eines HTML-Elements mit einbeziehen.
|
||||||
self.texte.append(data)
|
self.texte.append(data)
|
||||||
|
|
||||||
def _link_result(self, link_match):
|
def _link_replace(self, link_match):
|
||||||
self.links.append(link_match.group(0))
|
self.links.append(link_match.group(0))
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
|
|
||||||
def display_tags(tags, min_score):
|
def display_tags(tags, max_tags):
|
||||||
# Die Ergebnisse auf der Konsole ausgeben.
|
# Die Ergebnisse auf der Konsole ausgeben.
|
||||||
for tag in tags:
|
for index, tag in enumerate(tags,):
|
||||||
if tag.score <= min_score:
|
if index >= max_tags:
|
||||||
continue
|
break
|
||||||
print(f"Score: {tag.score:>3} Word: {tag.name}")
|
print(f"Score: {tag.score:>3} Word: {tag.name}")
|
||||||
|
|
||||||
|
|
||||||
|
@ -163,7 +171,7 @@ def main():
|
||||||
scanner = FileScanner(file)
|
scanner = FileScanner(file)
|
||||||
tags = scanner.scan_file()
|
tags = scanner.scan_file()
|
||||||
# Die Ergebnisse auf der Konsole ausgeben
|
# Die Ergebnisse auf der Konsole ausgeben
|
||||||
display_tags(tags, min_score=20)
|
display_tags(tags, max_tags=10)
|
||||||
# Die eingestellte Anzahl an Tags für die Ausgabedatei übernehmen, sofern vorhanden.
|
# Die eingestellte Anzahl an Tags für die Ausgabedatei übernehmen, sofern vorhanden.
|
||||||
final_tags[title] = tags[:TAGS_PER_ARTICLE] if len(tags) > TAGS_PER_ARTICLE else tags
|
final_tags[title] = tags[:TAGS_PER_ARTICLE] if len(tags) > TAGS_PER_ARTICLE else tags
|
||||||
# Die Ausgabedatei schreiben
|
# Die Ausgabedatei schreiben
|
||||||
|
|
Loading…
Reference in a new issue