Этот проект посвящен раскрытию возможностей и изучению того, что могут делать OCR и NLP, а также изучению дополнительных возможностей для поиска других решений.
Проблема, которую пытаются решить сейчас, - это извлечь номер лицензии, дату выдачи и дату истечения срока действия агентов по недвижимости из лицензионного сертификата. Эта статья не говорит о том, как кодировать и структурировать, она только демонстрирует, как получается решение. Основное внимание уделяется выполняемой задаче.
Подход к решению этой же проблемы заключается в извлечении каждой строки с помощью OCR (библиотека pytesseract python) и нахождении ключевых слов внутри каждой строки. Предполагается, что ключевые слова будут иметь символ, т.е. после него будет стоять двоеточие (EXPIRES:, Effective:, License Number :). Примеры ключевых слов приведены ниже:
Номер ЛИЦЕНЗИИ
СРОК ДЕЙСТВИЯ
Срок действия
Действующий
Идентификационный номер
Дата выдачи
Дата истечения
Как только ключевое слово найдено в строке, на основе предположения, изложенного выше, оно отделяется и затем сохраняется в списке. Где первый элемент - это ключ, а второй элемент - это значение. Его также можно сохранить в хэше.
Функция Analyze выполняет всю работу по разделению строк с учетом сделанного предположения и отвечает за внесение их в список. Ниже приведен фрагмент кода.
def analyse(lines, keywords): slist = [] i = 0 while i < len(lines): word = re.split(":|-|~|#", lines[i]) if isKeyWord(keywords, word[0]): if (isEmpty(word[1])): i += 1 while (i < len(lines)): flag = False word[1] += " " + lines[i] str = lines[i].split(", ") for fu in str: if (isPincode(fu)): flag = True break if flag: break i += 1 push(slist, word) i += 1 return slist
Теперь запись для библиотеки SpaCy:
Прежде чем начать работу с pytesseract, вы использовали API Google Vision для получения текста из заданного изображения. В то время была сосредоточена концентрация на анализе текста. Искал готовую библиотеку. И нашел SpaCy очень полезным. Он поставляется с предварительно обученным обнаружением сущностей, и это потрясающе. В любом случае его можно настроить. Как его использовать, зависит от приложения или отдельного человека. Я бы предпочел написать отдельную статью, объясняющую возможности библиотеки SpaCy. А пока остановимся на текущей статье.
Функция анализа, описанная выше, будет работать, если в строке есть одно ключевое слово. Если он найдет два ключевых слова, он потерпит неудачу. Может быть, мы могли бы улучшить сам код анализа. Но я решил использовать библиотеку SpaCy, чтобы моя работа выполнялась легко и быстро. Создал набор правил соответствия для объекта SpaCy, чтобы идентифицировать правило и создавать на его основе сущность. Итак, интерфейс для этой интеграции выглядит следующим образом:
#line = 'License Number: 12345 Issued on: November 10, 2018 Expiry: November 10, 2028' obj = spacy_lib.split_entity(line) # obj = ['License Number: 12345', 'Issued on: November 10, 2018', 'Expiry: November 10, 2028']
При прохождении каждой строки он возвращает список идентифицированных ключевых слов. Теперь моя функция анализа будет рада принять и проанализировать его так, как я хочу.
Вывод:
В коде задействованы следующие части:
- Извлеките текст из лицензионного сертификата с помощью pytesseract
- Обработайте извлеченные данные, передав в SpaCy. Использование поддержки, предоставляемой библиотекой NLP (SpaCy).
- Проанализируйте обработанные данные. И извлеките из сертификата необходимые ключевые слова.
Ссылка на GitHub для базы кода: https://github.com/shravanc/ocr_nlp