Нормализация названий книг - Python - PullRequest
0 голосов
/ 17 марта 2010

У меня есть список названий книг:

  • "Хоббит: 70-летие"
  • "Хоббит"
  • «Хоббит (иллюстрированное / коллекционное издание) [туда и обратно]»
  • «Хоббит: или туда и обратно»
  • «Хоббит: Подарочная упаковка»

и так далее ...


Я подумал, что если бы я как-то нормализовал заголовки, было бы проще реализовать автоматизированный способ узнать, на какую книгу ссылается каждое издание.

normalised = ''.join([char for char in title 
                       if char in (string.ascii_letters + string.digits)])

или

normalised = ''
for char in title:
  if char in ':/()|':
    break
  normalised += char
return normalised

Но очевидно, что они работают не так, как задумано, поскольку заголовки могут содержать специальные символы, а издания могут в основном иметь очень разный формат заголовков.


Помощь будет очень цениться! Спасибо:)

Ответы [ 2 ]

1 голос
/ 17 марта 2010

Я бы предложил использовать сторонний веб-сервис, такой как librarything , который, как я считаю, может сделать то, что вы просите, для начала ознакомьтесь с их документацией:

http://www.librarything.com/services/rest/documentation/1.0/librarything.ck.getwork.php

1 голос
/ 17 марта 2010

Это полностью зависит от ваших данных. Для приведенных вами примеров простым решением нормализации может быть:

import re

book_normalized = re.sub(r':.*|\[.*?\]|\(.*?\)|\{.*?\}', '', book_name).strip()

Это вернет "Хоббит" для всех примеров. Он удаляет что-либо после первого двоеточия и включая его, или что-либо в скобках (нормальное, квадратное, фигурное), а также пробелы в начале и в конце.

Однако в общем случае это не очень хорошее решение, поскольку в некоторых книгах в названии книги есть двоеточия или части в скобках. Например. название серии, за которой следует двоеточие, за которым следует название конкретной записи серии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...