Real Data - April 2016 (3-4/6)

3) Segment the Twitter Hashtags

Wenn man mehrere Wörter für ein Twitter-Hashtag benutzen wollte, muss man die Wörter ohne Leerzeichen tippen. Zum Beispiel wird "we are the people" zu #wearethepeople. Die Aufgabe ist der Gegenteil: Für ein gegebenes Twitter-Hashtag stellt man den originalen Satz fest. Man muss nämlich Leerzeichen hineinsetzen.

Die zwei Teilnehmer, die volle Punktzahl bekommen, benutzten eine sehr große Liste von Wörtern und analysierten ausführlich. Dagegen hatte ich eine Liste von nur 416 Wörter und der Quelltext war sehr kurz und einfach.

#!/usr/bin/python3 -tt
import re

stops = [ ''' 416 Stoppwörter ''' ]
stops.sort(key=lambda x:len(x),reverse=True)

def triad(string):
    for term in stops:
        match = re.search('^(\w*)%s(\w*)$' % term, string)
        if match:
            return triad(match.group(1))+[term]+triad(match.group(2))
    return [string]

for _ in range(int(input())):
    hashtag = input().rstrip()
    splitted = list(filter(lambda x: len(x)>0,triad(hashtag)))
    print(' '.join(splitted))

Meine Idee ist sehr einfach. Wenn ich ein Wort in einem Hashtag finde, setze ich Leerzeichen neben das Wort. Ein Beisiel: #thewalkingdead. Man findet "walking" darin, dann setzt man Leerzeichen vor "w" und nach "g" und bekommt "the walking dead". Am wichtigsten ist die Reihe der Stoppwörter. Falls man zuerst "walk" findet, bekommt man "the walk ingdead". Deshalb muss ein längeres Wort in einem ersten Teil der Liste vorkommen.

4) The Missing Apostrophes

Hier gibt es zwei Sätze, in denen Apostrophe fehlen.

Kelly was asked if hed miss his twin brother Mark, who also was an astronaut.

"Were used to this kind of thing," he said. "Ive gone longer without seeing him and it was great."

Die Aufgabe ist, richtig Apostrophe hinzuzufügen, wie die folgenden Sätze.

Kelly was asked if he'd miss his twin brother Mark, who also was an astronaut.

"We're used to this kind of thing," he said. "I've gone longer without seeing him and it was great."

Die einfache Strategie ist, eine List der Wörter zu bekommen, die einen Apostroph erhält. Damit kann man eine Abbildung zu machen, die ein Wort ohne Apostroph durch das entsprechendes Wort mit Apostroph ersetzt. Aber die Idee ist gar nicht genug. Zum Beispiel

  • "were" (Präteritum von "are") und "we're"
  • "well" (gut) und "we'll"
  • "Russians" (Plural) und "Russian's"

Um diese Wörter richtig zu erkennen, muss man die Grammatik des Satzes richtig feststellen. Weil das sehr schwere ist, verbesserte ich die erste Idee:

  1. mit der Liste von Stoppwörter zwei Liste zu machen. Die eine ist die Liste @mit der Wörter mit einem Apostroph: "shouldn't", "they've", usw. Die andere ist die Liste @ohne von Wörter mit "s" am Ende aber ohne Apostroph: "effectiveness", "changes", "allows", etc.
  2. Wenn ein Wort in der Liste @ohne ist, wird das Wort nicht umwandelt. (Nicht nötig.)
  3. Falls das Ende des Wortes "ys" ist, wird der Teil zu "y's" umwandelt.

Um eine hohe Note zu bekommen, muss man der Liste @mit viele Eigennamen hinzufügen. Aber I habe das nicht gemacht, weil ein Eigennahme + "s" nicht immer den Name +"'s" sein soll.

Share this page on        
Categories: #data-mining