From b55a2543e6e8935f19a3d6444134f6c089ce4801 Mon Sep 17 00:00:00 2001 From: OneNewDev Date: Wed, 8 Jun 2022 18:14:39 +0200 Subject: [PATCH 1/8] add excluded words --- exclude.py | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/exclude.py b/exclude.py index 553c591..48eeca6 100644 --- a/exclude.py +++ b/exclude.py @@ -1,6 +1,19 @@ 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", + "aktiv", "alle", "als", "am", @@ -9,15 +22,20 @@ EXCLUDED_WORDS = { "auf", "aus", "bei", + "beim", + "bereits", "bis", + "bist", "chf", "dabei", "dafür", "damit", "dank", + "dann", "das", "dass", "davon", + "dazu", "deine", "deiner", "dem", @@ -27,6 +45,9 @@ EXCLUDED_WORDS = { "die", "diese", "diesem", + "diesen", + "dieser", + "dieses", "dir", "doch", "dort", @@ -46,7 +67,9 @@ EXCLUDED_WORDS = { "euch", "euro", "für", + "gegen", "gibt", + "habe", "haben", "hat", "heute", @@ -60,8 +83,10 @@ EXCLUDED_WORDS = { "in", "ins", "ist", + "ja", "jetzt", "kann", + "keine", "konnte", "man", "mehr", @@ -73,8 +98,10 @@ EXCLUDED_WORDS = { "mit", "morgen", "nach", + "nein", "nicht", "noch", + "nun", "nur", "oder", "ohne", @@ -85,6 +112,7 @@ EXCLUDED_WORDS = { "sich", "sie", "sind", + "soll", "um", "und", "uns", @@ -95,6 +123,10 @@ EXCLUDED_WORDS = { "vor", "war", "was", + "weil", + "welche", + "welcher", + "welches", "wenig", "weniger", "wenn", @@ -110,10 +142,12 @@ EXCLUDED_WORDS = { "zu", "zum", "zur", + "zwei", "über", - # Englische wörter + # Englische Wörter "about", "and", + "before", "default", "i", "in", @@ -122,11 +156,13 @@ EXCLUDED_WORDS = { "no", "of", "or", + "previous", "that", "the", "this", "to", "will", + "with", "yes", "you", "your", From 96c8c490300303548bd47bc3904d30954205cac7 Mon Sep 17 00:00:00 2001 From: OneNewDev Date: Wed, 8 Jun 2022 18:15:29 +0200 Subject: [PATCH 2/8] add some strip characters --- tagger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tagger.py b/tagger.py index 83e1ec8..cede670 100644 --- a/tagger.py +++ b/tagger.py @@ -52,7 +52,7 @@ class FileScanner(HTMLParser): title_words = set(title.split('-')) for word in words: # Verschiedene Zeichen vom Anfang und Ende der Wörter entfernen. - tag_name = word.strip(".,:;!?\"'()«»") + tag_name = word.strip(".,:;!?\"'()-„“«» ") # Leere Wörter ignorieren if not tag_name: continue From c271462e93fd28928e9acb351f37ec661b6ac301 Mon Sep 17 00:00:00 2001 From: OneNewDev Date: Wed, 8 Jun 2022 18:16:05 +0200 Subject: [PATCH 3/8] increase upper letters score --- tagger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tagger.py b/tagger.py index cede670..bde2579 100644 --- a/tagger.py +++ b/tagger.py @@ -77,7 +77,7 @@ class FileScanner(HTMLParser): # Die Anzahl der Großbuchstaben in dem originalen Wort zählen ... upper_letters_count = len(_UPPER_CHECK.findall(tag_name)) # ... und die Bewertung entsprechen der Anzahl verbessern. - score += upper_letters_count * 5 + score += upper_letters_count * 10 # Die Bewertung für das Wort speichern. # Wenn das Wort bereits eine Bewertung besitzt werden die beiden Bewertungen zusammen gerechnet. if word not in words_with_usage: From 760dd97855015a8bc8729f923c0ada45367594ff Mon Sep 17 00:00:00 2001 From: OneNewDev Date: Wed, 8 Jun 2022 18:25:23 +0200 Subject: [PATCH 4/8] check for hyphen in words --- tagger.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tagger.py b/tagger.py index bde2579..c34b920 100644 --- a/tagger.py +++ b/tagger.py @@ -78,6 +78,8 @@ class FileScanner(HTMLParser): upper_letters_count = len(_UPPER_CHECK.findall(tag_name)) # ... und die Bewertung entsprechen der Anzahl verbessern. score += upper_letters_count * 10 + if '-' in word: + score += 1 # Die Bewertung für das Wort speichern. # Wenn das Wort bereits eine Bewertung besitzt werden die beiden Bewertungen zusammen gerechnet. if word not in words_with_usage: From 73708fffd8ea710e9ea3d0c88832fa84bea66b14 Mon Sep 17 00:00:00 2001 From: OneNewDev Date: Wed, 8 Jun 2022 18:48:04 +0200 Subject: [PATCH 5/8] update code comments --- tagger.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/tagger.py b/tagger.py index c34b920..6ce69c4 100644 --- a/tagger.py +++ b/tagger.py @@ -37,7 +37,7 @@ class FileScanner(HTMLParser): def scan_file(self): # Datei einlesen content = read_file(self.file) - # HTMLParser aufrufen um HTML-Syntax-Elemente zu entfernen. + # HTMLParser aufrufen, um HTML-Syntax-Elemente zu entfernen. self.feed(content) words_with_usage = {} @@ -78,13 +78,14 @@ class FileScanner(HTMLParser): upper_letters_count = len(_UPPER_CHECK.findall(tag_name)) # ... und die Bewertung entsprechen der Anzahl verbessern. score += upper_letters_count * 10 + # Die Bewertung leicht erhöhen, wenn ein Bindestrich im Wort enthalten ist. if '-' in word: score += 1 - # Die Bewertung für das Wort speichern. - # Wenn das Wort bereits eine Bewertung besitzt werden die beiden Bewertungen zusammen gerechnet. if word not in words_with_usage: + # Die Bewertung für das Wort speichern. words_with_usage[word] = Tag(name=tag_name, score=score) else: + # Wenn das Wort bereits eine Bewertung besitzt, werden die beiden Bewertungen zusammen gerechnet. words_with_usage[word].score += score link_words = [] @@ -94,7 +95,10 @@ class FileScanner(HTMLParser): # Link-Teile in einzelne Wörter aufteilen words += re.split(r'[/\-_#.?&=]', link) for link_word in link_words: + # Alle Buchstaben verkleinern 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: words_with_usage[link_word] += 10 @@ -112,14 +116,16 @@ class FileScanner(HTMLParser): break 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: 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) - def _link_result(self, link_match): + def _link_replace(self, link_match): self.links.append(link_match.group(0)) return '' From cf76cbca55bb56053e31b1c1bf7962200e5857b5 Mon Sep 17 00:00:00 2001 From: OneNewDev Date: Wed, 8 Jun 2022 19:00:49 +0200 Subject: [PATCH 6/8] fix link scoring --- tagger.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tagger.py b/tagger.py index 6ce69c4..3934526 100644 --- a/tagger.py +++ b/tagger.py @@ -93,14 +93,14 @@ class FileScanner(HTMLParser): # Eventuelle URL-codierte Zeichen in die eigentlichen Zeichen umwandeln. (z.B. %2F -> /) link = unquote_plus(link) # Link-Teile in einzelne Wörter aufteilen - words += re.split(r'[/\-_#.?&=]', link) + link_words += re.split(r'[/\-_#.?&=]', link) for link_word in link_words: # Alle Buchstaben verkleinern 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: - words_with_usage[link_word] += 10 + words_with_usage[link_word].score += 10 # Die Wörter nach ihrer Bewertung sortieren return sorted(words_with_usage.values(), key=lambda tag: tag.score, reverse=True) From 2dd21cc80ddd0fee44f2465240e11c808914be39 Mon Sep 17 00:00:00 2001 From: OneNewDev Date: Wed, 8 Jun 2022 19:09:53 +0200 Subject: [PATCH 7/8] add excluded words --- exclude.py | 1 + 1 file changed, 1 insertion(+) diff --git a/exclude.py b/exclude.py index 48eeca6..0f38222 100644 --- a/exclude.py +++ b/exclude.py @@ -71,6 +71,7 @@ EXCLUDED_WORDS = { "gibt", "habe", "haben", + "habt", "hat", "heute", "hier", From db471d5559258e45b3de87ad98f190781b24a26e Mon Sep 17 00:00:00 2001 From: OneNewDev Date: Wed, 8 Jun 2022 19:12:30 +0200 Subject: [PATCH 8/8] use max tags instead of min score as display limit --- tagger.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tagger.py b/tagger.py index 3934526..1c5551f 100644 --- a/tagger.py +++ b/tagger.py @@ -130,11 +130,11 @@ class FileScanner(HTMLParser): return '' -def display_tags(tags, min_score): +def display_tags(tags, max_tags): # Die Ergebnisse auf der Konsole ausgeben. - for tag in tags: - if tag.score <= min_score: - continue + for index, tag in enumerate(tags,): + if index >= max_tags: + break print(f"Score: {tag.score:>3} Word: {tag.name}") @@ -171,7 +171,7 @@ def main(): scanner = FileScanner(file) tags = scanner.scan_file() # 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. final_tags[title] = tags[:TAGS_PER_ARTICLE] if len(tags) > TAGS_PER_ARTICLE else tags # Die Ausgabedatei schreiben