Сравните два текста

Чтобы проверить инструмент миграции, я хочу сравнить два текста: один из исходного A, а другой из целевого инструмента B. Чтобы заполнить B, я использую API-интерфейс на основе JSON. B применяет некоторые «преобразования» к тексту, которые я точно не знаю.

Вот фрагмент моего кода, который я использую:

  bkclient = Client()
  for mapping in BkMapping.select(): #get all objects
    entity = Elgg_Entities.get(Elgg_Entities.guid == mapping.elgg_id)
    if entity.subtype == 5:#postopic
      pass
    else:
      elgg_desc = unicodedata.normalize("NFKD", entity.entity.description)
      bk_content = unicodedata.normalize("NFKD", bkclient.get_post(mapping.bkid).get("data").get('content'))

      if resume(bk_content) == resume(elgg_desc):
        pass
      else:
        print('bk content')
        print(bk_content)
        print("elgg content")
        print(elgg_desc)
        input('continue...')

Как результат:

#### bk content (B) ######
<p>Bonjour à tous,</p>
<p>Je souhaite récolter des informations sur les actions menées en faveur des Seniors au sein du Groupe.</p>
<p>Si vous menez ou avez mené des actions en faveur des seniors et de leur insertion, pourriez-vous m’en faire part. Si je peux avoir des retours d’ici demain matin, ce serait super ! Merci d’avance de vos retours.</p>
######### elgg content (A) #########
<p>Bonjour &agrave; tous,</p>

<p>Je souhaite r&eacute;colter des informations sur les actions men&eacute;es en faveur des Seniors au sein du Groupe.</p>

<p>Si vous menez ou avez men&eacute; des actions en faveur des seniors et de leur insertion, pourriez-vous m&rsquo;en faire part. Si je peux avoir des retours d&rsquo;ici demain matin, ce serait super&nbsp;! Merci d&rsquo;avance de vos retours.</p>

Итак, я ищу инструмент для создания хэша этих текстов, который имеет дело с акцентами ‹=> html-объектами, пробелами и т. д.


person Ali SAID OMAR    schedule 14.01.2014    source источник
comment
Я считаю, что инструмент хеширования по умолчанию должен работать, вам просто нужно указать набор символов в файле python, чтобы программа знала, что вы используете юникод.   -  person Dylan Lawrence    schedule 14.01.2014
comment
Используя docs.python.org/2/library/functions.html#hash, возвращает разные значения, я на Python3...   -  person Ali SAID OMAR    schedule 14.01.2014
comment
Похоже, вы ищете инструмент сравнения   -  person loopbackbee    schedule 14.01.2014
comment
может быть очень сложно использовать внешний инструмент... Моя первая цель состояла в том, чтобы автоматизировать проверку. Поэтому добавление некоторого слоя к сценарию заставит меня протестировать тестовый сценарий. Я хотел бы легкий метод, мне было интересно, может ли подсчет всех «а» или другой шаблон достичь цели?   -  person Ali SAID OMAR    schedule 14.01.2014


Ответы (1)


Узнал, как это сделать, BeautifulSoup может декодировать html-объекты:

def remove_accents(input_str):
    nkfd_form = unicodedata.normalize('NFKD', input_str)
    only_ascii = nkfd_form.encode('ASCII', 'ignore')
    return only_ascii

def normalize(text):
  text = re.sub(r'\s+', '', str(BeautifulSoup(text)), flags = re.MULTILINE)
  return str(remove_accents(text))

def compare_text(s1, s2):
  s1 = normalize(s1.lower())
  s2 = normalize(s2.lower())
  l1 = len(s1)
  l2 = len(s2)
  if l1 == l2:
    return  s1 == s2
  return False

t1="""      
<p>Bonjour à tous,</p>
<p>Je souhaite récolter des informations sur les actions menées en faveur des Seniors au sein du Groupe.</p>
<p>Si vous menez ou avez mené des actions en faveur des seniors et de leur insertion, pourriez-vous m’en faire part. Si je peux avoir des retours d’ici demain matin, ce serait super ! Merci d’avance de vos retours.</p>
"""
t2="""
<p>Bonjour &agrave; tous,</p>

<p>Je souhaite r&eacute;colter des informations sur les actions men&eacute;es en faveur des Seniors au sein du Groupe.</p>

<p>Si vous menez ou avez men&eacute; des actions en faveur des seniors et de leur insertion, pourriez-vous m&rsquo;en faire part. Si je peux avoir des retours d&rsquo;ici demain matin, ce serait super&nbsp;! Merci d&rsquo;avance de vos retours.</p>  
"""

print(compare_text(t1, t2))
True
person Ali SAID OMAR    schedule 17.01.2014