2016-07-03 13 views
5

Piszę skrobaczkę do programów telewizyjnych i innych mediów (gier, filmów itp.), A nie wszystkie źródła są sformatowane w ten sam sposób dla określonego programu. Na przykład jedno źródło może reprezentować napisy za pomocą myślnika, inne średniki. Obecnie używam dystansu Levenshtein, aby porównać zeskrobane dane z danymi wyodrębnionymi z nazwy pliku telewizyjnego, ale zastanawiałem się, czy algorytm został zaprojektowany dla krótkich łańcuchów krótszych niż zdanie. Czy istnieje algorytm, który lepiej odpowiada tej potrzebie?Jaki jest najodpowiedniejszy algorytm sznurkowy do porównywania tytułów telewizyjnych?

Odpowiedz

3

Przed porównaniem/pomiarem odległości należy znormalizować (znormalizować) tytuły.

Normalizacja powinna obejmować takie rzeczy jak:

  • Podstawowe formatowanie (np kodowania UTF16 żadna wiodąca/końcowe spacje i karty)
  • zasady alfabetu (np zastąpić literę A)
  • Akronim ekspansji (np NY -> Nowy Jork)
  • Reguły nazw lokalizacji (np. Nazwy miast nie powinny zawierać spacji, ale myślniki)
  • Reguły kapitalizacji (np. Każda litera po myślniku powinna być pisana wielkimi literami)
  • Usunięcie symboli (np. !,?)
  • numeryczne konwersje ("trzysta" do "300")
  • rzymskie liczby konwersji (np "Ludwik XVI" do "Louis 16")
  • Non-American English na amerykańskim angielskim (np „kolor” na „kolor”)
  • Skróty zasady (np „Inc.” zamiast „Incorporated”, „vs.” zamiast „kontra”)

można użyć Levenshteina odległość między parami słów (Nie używaj go do całego zdania), ale zaimplementuj jakieś przesuwane okno, ponieważ niektóre wyrazy (np. "The") mogą nie występować w jednej z reprezentacji.

Powiązane problemy