?

Log in

No account? Create an account
dump -0f - /dev/mind
Я знаю Haskell, OCaml, GSM, эндофункторы и много других страшных слов
Извлечение данных о фильме с imdb.com и их содержательная интерпретация (ч. 2) 
11th-Apr-2008 11:05 pm
Некоторое время тому назад я писал (http://users.livejournal.com/_adept_/79951.html) о скрипте, с помощью которого я извлекаю данные о фильмах с сайта imdb.com. После нескольких недель эксплуатации скрипт оброс дополнительными возможностями, главная из которых - "декодирование" оценки фильма с помощью IMDB Movie Decoder Ring.

Что это за "декодирование" и зачем оно нужно? А для того, чтобы ответить на вопрос: "фильм с оценкой 6.1 - это фильм плохой, хороший или так себе?". Если бы оценки посетителей были бы распределены равномерно в интервале от 1 до 10, то можно было бы утверждать, что фильм с оценкой 6.1 - скорее хороший, чем средний. Однако фильмов с оценкой 1 и 2 на imdb.com почти нет, а фильмов с оценкой в интервале [5;7] - очень много. Как же можно содержательно интерпретировать оценку?

Например, так: можно заменить оценку X на процентное отношение фильмов, имеющих оценку <=X, к общему количеству фильмов. Если более 50% фильмов в базе imdb.com имеют оценку <=X, то можно считать, что фильм - скорее хороший. Более того, подобные процентные отношения можно рассчитать отдельно для всех жанров, к которым относится фильм, и тогда можно будет ответить на вопрос, как выбранная нами мелодрама (жанры Comedy, Drama) соотносится с другими комедиями и драмами.

Чтобы не выполнять каждый раз обработку всей базы imdb, Tom Moertel свел подобные расчеты в удобную компактную таблицу, которую он назвал IMDB Movie Decoder Ring. Табличка эта предназначена для использования вручную, но я, как человек ленивый, тоже не захотел связываться с обработкой сырых данных с imdb.com, и запихнул эту табличку в свой скрипт. Теперь в таблице результатов добавились две колонки: процент всех фильмов, оцененных ниже, чем этот, и (в отдельной колонке) подобные проценты по всем жанрам фильма, через запятую.

В результате можно выяснить, что, например, фильм "Broken English (2007)", имеющий оценку 6.3 -- едва-едва попадает в категорию "скорее хорошие". Он "лучше" всего 51% фильмов в базе imdb. Кроме того, если посмотреть на его положение в каждом из жанров -- Comedy, Drama, Romance -- то окажется, что он лучше 55% комедий, но - всего лишь 42% драм и 46% романтических фильмов. Получается, что для комедии оценка 6.3 - это "хорошо", а для драмы - всего лишь "удовлетворительно.

Полный текст скрипта - под катом.

Вот скрипт:

#!/bin/bash
# Decoder ring taken from http://community.moertel.com/ss/space/IMDB+Movie-Rating+Decoder+Ring
request="$@"
file="imdb_dump.html"
decoder="decoder-ring"

wget -q -U Firefox "http://www.google.com/search?q=$request site:imdb.com&btnI=I\`m Feeling Lucky" -O "$file"

title=$(grep "<title>" "$file" | sed -e 's/<[^ ]*>//g')
rating=$(grep -A1 "<b>User Rating:</b>" "$file" | grep -o '[0-9][0-9./]*' | sed -e 's/\/.*//')
votes=$(grep -o '[0-9,]* votes' "$file")
genre=$(grep -A1 "<h5>Genre:</h5>" "$file" | grep -o ">[A-Z][a-zA-Z]*<" | sed -e 's/[<>]//g' \
        | paste - - - - - - - - - | sed -e 's/[ \t]*$//' -e 's/\t/,/g')
url=http://www.imdb.com/$(grep -o 'title/tt[0-9]*' "$file" | head -1)
runtime=$(grep -A1 Runtime "$file" | tail -1)

column=1
r=$(echo $rating | sed -e 's/\.//' -e 's/$/0/' )
if [ -n "$r" ] ; then
    for treshold in 400 500 525 550 575 600 625 650 675 700 725 750 775 800 825 850 875 900 1000 ; do
        if [ "$r" -le "$treshold" ] ; then break
        else column=$(( $column + 1 ))
        fi
    done

    all_genres_rating=$(head -1 $decoder | cut -f $column)
    rating_regexp=$(echo $genre | sed -e 's/,/\|/g')
    per_genre_rating=`grep -E "($rating_regexp)" $decoder | cut -f $column \
                      | paste - - - - - - - - - | sed -e 's/[ \t]*$//' -e 's/\t/,/g'`
fi

echo "$request|$title|$url|$genre|$runtime|$rating|$votes|$all_genres_rating|$per_genre_rating" | tee -a movies.csv


Рядом надо положить файл decoder-ring следующего содержания (поля разделены табуляциями):

All genres      10      23      27      33      39      46      51      60      66      74      79      86      89      93    95       97      98      99
Action  22      40      44      51      56      61      66      73      77      82      85      89      91      93      95    96       97      98
Adult   1       9       18      49      73      92      96      98      98      99      99      99      ++      ++      ++    ++       ++      ++
Adventure       14      30      33      41      46      52      56      65      69      75      78      83      86      91    93       95      96      97
Animation       4       15      18      24      28      33      35      44      48      57      62      69      76      84    89       94      96      98
Biography       3       5       7       12      15      23      29      40      50      62      70      83      87      94    97       99      ++      ++
Comedy  9       23      27      35      40      48      55      64      71      78      84      90      93      95      97    98       99      99
Crime   7       20      24      31      37      45      52      63      69      76      81      89      92      95      97    98       99      99
Documentary     5       11      13      16      19      22      25      32      37      46      53      66      73      83    88       93      96      98
Drama   4       13      16      22      27      35      42      53      60      71      78      87      91      96      97    99       99      ++
Family  14      34      39      48      55      62      66      76      80      86      88      92      94      97      98    99       99      99
Fantasy 13      26      30      38      45      52      56      65      69      76      79      84      87      91      93    95       96      97
Game Show       29      29      29      29      29      43      43      43      43      43      43      43      57      71    71       71      71      71
History 2       4       4       8       10      14      18      26      33      45      51      64      74      84      89    94       96      98
Horror  35      56      61      68      72      78      81      86      89      92      93      96      96      97      98    98       98      99
Music   7       14      16      20      24      30      34      40      47      53      60      68      74      82      87    91       95      97
Musical 8       18      19      27      31      37      44      52      60      71      77      85      90      95      97    98       99      ++
Mystery 7       21      26      33      38      46      51      62      69      78      81      86      89      93      95    96       98      98
News    0       0       0       0       20      40      40      40      40      40      40      60      60      60      60    60       60      60
Reality TV      28      40      40      52      56      60      64      64      68      68      72      72      80      84    88       92      92      96
Romance 4       14      17      24      30      39      46      59      66      76      82      89      93      97      98    99       99      ++
Sci-Fi  26      43      47      52      57      62      65      71      74      79      81      86      89      93      94    96       97      98
Short   4       8       9       12      15      19      23      30      37      49      57      72      77      87      93    97       98      99
Sport   8       20      24      30      35      45      52      64      68      76      81      88      91      95      97    98       99      ++
Talk Show       25      25      25      25      25      25      25      25      25      25      25      50      50      50    50       75      75      75
Thriller        15      35      40      48      54      62      67      75      80      86      88      93      95      97    98       98      99      99
War     5       9       11      15      18      23      28      34      43      50      59      71      77      86      92    95       97      99
Western 14      23      26      34      42      47      52      68      76      81      83      90      95      96      97    98       99      99
Comments 
12th-Apr-2008 04:28 am (UTC)
кстати о фильмах. когда я хочу решить, стоит ли смотреть фильм, я обычно смотрю рейтинг на rottentomatoes.com — если там рейтинг ниже 30%, то время обычно не стоит тратить.
12th-Apr-2008 12:34 pm (UTC)
Думаю будет интересно посмотреть на http://imdbpy.sourceforge.net/ :-)
This page was loaded Sep 22nd 2019, 8:09 am GMT.