diff --git a/exclude.py b/exclude.py index 0f38222..553c591 100644 --- a/exclude.py +++ b/exclude.py @@ -1,19 +1,6 @@ EXCLUDED_WORDS = { - # Sehr häufig vorkommende Tags - # "aktualisiert", - # "behoben", - # "datei", - # "dateien", - # "erschienen", - # "neue", - # "version", - # "versionen", - # "veröffentlicht", - # "installieren", - # "deinstallieren", - # Deutsche Wörter + # Deutsche wörter "aber", - "aktiv", "alle", "als", "am", @@ -22,20 +9,15 @@ EXCLUDED_WORDS = { "auf", "aus", "bei", - "beim", - "bereits", "bis", - "bist", "chf", "dabei", "dafür", "damit", "dank", - "dann", "das", "dass", "davon", - "dazu", "deine", "deiner", "dem", @@ -45,9 +27,6 @@ EXCLUDED_WORDS = { "die", "diese", "diesem", - "diesen", - "dieser", - "dieses", "dir", "doch", "dort", @@ -67,11 +46,8 @@ EXCLUDED_WORDS = { "euch", "euro", "für", - "gegen", "gibt", - "habe", "haben", - "habt", "hat", "heute", "hier", @@ -84,10 +60,8 @@ EXCLUDED_WORDS = { "in", "ins", "ist", - "ja", "jetzt", "kann", - "keine", "konnte", "man", "mehr", @@ -99,10 +73,8 @@ EXCLUDED_WORDS = { "mit", "morgen", "nach", - "nein", "nicht", "noch", - "nun", "nur", "oder", "ohne", @@ -113,7 +85,6 @@ EXCLUDED_WORDS = { "sich", "sie", "sind", - "soll", "um", "und", "uns", @@ -124,10 +95,6 @@ EXCLUDED_WORDS = { "vor", "war", "was", - "weil", - "welche", - "welcher", - "welches", "wenig", "weniger", "wenn", @@ -143,12 +110,10 @@ EXCLUDED_WORDS = { "zu", "zum", "zur", - "zwei", "über", - # Englische Wörter + # Englische wörter "about", "and", - "before", "default", "i", "in", @@ -157,13 +122,11 @@ EXCLUDED_WORDS = { "no", "of", "or", - "previous", "that", "the", "this", "to", "will", - "with", "yes", "you", "your", diff --git a/tagger.py b/tagger.py index 1c5551f..83e1ec8 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 = {} @@ -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 @@ -77,15 +77,12 @@ 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 * 10 - # Die Bewertung leicht erhöhen, wenn ein Bindestrich im Wort enthalten ist. - if '-' in word: - score += 1 + score += upper_letters_count * 5 + # 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 = [] @@ -93,14 +90,11 @@ 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 - link_words += re.split(r'[/\-_#.?&=]', 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].score += 10 + words_with_usage[link_word] += 10 # Die Wörter nach ihrer Bewertung sortieren return sorted(words_with_usage.values(), key=lambda tag: tag.score, reverse=True) @@ -116,25 +110,23 @@ class FileScanner(HTMLParser): break def handle_data(self, data): - # Den Inhalt des aktuellen HTML-Tags ignorieren, wenn dieser auf der Liste der ausgeschlossenen HTML-Tags steht. + # Den Text innerhalb eines HTML-Elements mit einbeziehen. if self._current_html_tag in EXCLUDED_HTML_TAGS: return - # 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. + data = _LINK_PATTERN.sub(self._link_result, data) self.texte.append(data) - def _link_replace(self, link_match): + def _link_result(self, link_match): self.links.append(link_match.group(0)) return '' -def display_tags(tags, max_tags): +def display_tags(tags, min_score): # Die Ergebnisse auf der Konsole ausgeben. - for index, tag in enumerate(tags,): - if index >= max_tags: - break + for tag in tags: + if tag.score <= min_score: + continue print(f"Score: {tag.score:>3} Word: {tag.name}") @@ -171,7 +163,7 @@ def main(): scanner = FileScanner(file) tags = scanner.scan_file() # Die Ergebnisse auf der Konsole ausgeben - display_tags(tags, max_tags=10) + display_tags(tags, min_score=20) # 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