Python для NLP: работа с текстовыми и PDF-файлами

Это первая статья в моей серии статей о Python для обработки естественного языка [/ what-is-natural-language-processing /] (NLP). В этой статье мы начнем с основ Python для NLP. Мы увидим, как мы можем работать с простыми текстовыми файлами и файлами PDF с помощью Python. Работа с текстовыми файлами Текстовые файлы, вероятно, являются самыми основными типами файлов, с которыми вы можете столкнуться в своих усилиях по НЛП. В этом разделе мы увидим, как читать из текстового файла [/ read-files-with-p

Это первая статья в моей серии статей о Python для обработки естественного языка (NLP). В этой статье мы начнем с основ Python для NLP. Мы увидим, как мы можем работать с простыми текстовыми файлами и файлами PDF с помощью Python.

Работа с текстовыми файлами

Текстовые файлы, вероятно, являются самыми основными типами файлов, с которыми вы можете столкнуться в своих усилиях по НЛП. В этом разделе мы увидим, как читать из текстового файла в Python, создавать текстовый файл и записывать данные в текстовый файл .

Чтение текстового файла

Создайте текстовый файл со следующим текстом и сохраните его в локальном каталоге с расширением «.txt».

 Welcome to Natural Language Processing 
 It is one of the most exciting research areas as of today 
 We will see how Python can be used to work with text files. 

В моем случае я сохранил файл с именем «myfile.txt» в моем корневом каталоге «D:».

Чтение всего содержимого файла

Теперь посмотрим, как мы можем прочитать все содержимое файла. Первый шаг - указать путь к файлу, как показано ниже:

 myfile = open("D:\myfile.txt") 

Чтобы открыть файл, вы можете использовать встроенную функцию open Если вы выполняете приведенный выше фрагмент кода и не видите ошибки, это означает, что ваш файл был успешно открыт. Обязательно измените путь к файлу на то место, в котором вы сохранили текстовый файл.

Теперь посмотрим, что хранится в переменной myfile

 print(myfile) 

Результат выглядит так:

 <_io.TextIOWrapper name='D:\\myfile.txt' mode='r' encoding='cp1252'> 

Выходные данные читают, что myfile является оболочкой для myfile.txt и открывает файл в режиме только для чтения.

Если вы укажете неправильный путь к файлу, вы, вероятно, получите следующую ошибку:

 myfile222 = open("D:\myfile222.txt") 
 print(myfile222) 

 FileNotFoundError: [Errno 2] No such file or directory: 'D:\\myfile222.txt' 

Каждый раз, когда вы получаете Errno 2, может быть две причины. Либо ваш файл не существует, либо вы указали неправильный путь к файлу для open функции.

Теперь давайте прочитаем содержимое файла. Для этого вам нужно вызвать функцию read() myfile , как показано ниже:

 myfile = open("D:\myfile.txt") 
 print(myfile.read()) 

На выходе вы должны увидеть текст файла, как показано ниже:

 Welcome to Natural Language Processing 
 It is one of the most exciting research areas as of today 
 We will see how Python can be used to work with text files. 

Теперь, если вы read , вы увидите, что на консоли ничего не будет напечатано:

 print(myfile.read()) 

Это связано с тем, что после вызова read курсор перемещается в конец текста. Поэтому, когда вы снова вызываете read, ничего не отображается, так как текста для печати больше нет.

Решение этой проблемы состоит в том, что после вызова read() вызовите метод seek() и передайте 0 в качестве аргумента. Это переместит курсор обратно в начало текстового файла. Посмотрите на следующий сценарий, чтобы увидеть, как это работает:

 myfile = open("D:\myfile.txt") 
 print(myfile.read()) 
 myfile.seek(0) 
 print(myfile.read()) 

На выходе вы увидите, что содержимое текстового файла напечатано дважды.

Когда вы закончите работу с файлом, важно закрыть файл, чтобы другие приложения могли получить к нему доступ. Для этого вам нужно вызвать метод close() .

 myfile.close() 
Чтение файла построчно

Вместо того, чтобы читать все содержимое файла сразу, мы также можем читать содержимое файла построчно . Для этого нам нужно выполнить метод readlines() , который возвращает каждую строку в текстовом файле как элемент списка.

 myfile = open("D:\myfile.txt") 
 print(myfile.readlines()) 

На выходе вы увидите каждую строку текстового файла как элемент списка:

 ['Welcome to Natural Language Processing\n', 'It is one of the most exciting research areas as of today\n', 'We will see how Python can be used to work with text files.'] 

Во многих случаях это упрощает работу с текстом. Например, теперь мы можем легко перебирать каждую строку и печатать первое слово в строке.

 myfile = open("D:\myfile.txt") 
 for lines in myfile: 
 print(lines.split()[0]) 

Результат выглядит так:

 Welcome 
 It 
 We 

Запись в текстовый файл

Чтобы записать в текстовый файл, вам просто нужно открыть файл с режимом w или w+ . Первый открывает файл в режиме записи, а второй открывает файл как в режиме чтения, так и в режиме записи. Если файл не существует, он будет создан. Важно отметить, что если вы откроете файл, который уже содержит некоторый текст, в режиме w или w+ , все существующее содержимое файла будет удалено, как показано ниже:

 myfile = open("D:\myfile.txt", 'w+') 
 print(myfile.read()) 

В выводе вы не увидите ничего напечатанного на экране, поскольку файл открыт в w+ , все содержимое файла было удалено. Если вы хотите избежать этого, вы захотите вместо этого добавить текст, о чем я также расскажу ниже.

Теперь давайте запишем некоторый контент в файл с помощью метода write()

 myfile = open("D:\myfile.txt", 'w+') 
 print(myfile.read()) 
 myfile.write("The file has been rewritten") 
 myfile.seek(0) 
 print(myfile.read()) 

В приведенных выше сценариях, мы пишем текст в файл , а затем вызовите seek() метод , чтобы сместить курсор назад к началу , а затем вызова read метод для чтения содержимого файла. На выходе вы увидите недавно добавленный контент, как показано ниже:

 The file has been rewritten 

Часто вам не нужно просто стереть существующее содержимое файла. Скорее, вам может потребоваться добавить содержимое в конец файла.

Для этого вам нужно открыть файл a+ который относится к добавлению и чтению.

Снова создайте файл со следующим содержимым и сохраните его как «myfile.txt» в каталоге «D»:

 Welcome to Natural Language Processing 
 It is one of the most exciting research areas as of today 
 We will see how Python can be used to work with text files. 

Выполните следующий скрипт, чтобы открыть файл в режиме добавления:

 myfile = open("D:\myfile.txt", 'a+') 
 myfile.seek(0) 
 print(myfile.read()) 

На выходе вы увидите содержимое файла.

Затем давайте добавим текст в файл.

 myfile.write("\nThis is a new line") 

Давайте теперь снова прочитаем содержимое файла:

 myfile.seek(0) 
 print(myfile.read()) 

В выводе вы увидите новую добавленную строку в конце текста, как показано ниже:

 Welcome to Natural Language Processing 
 It is one of the most exciting research areas as of today 
 We will see how Python can be used to work with text files. 
 This is a new line 

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

 with open("D:\myfile.txt") as myfile: 
 print(myfile.read()) 

Используя with , как показано выше, вам не нужно явно закрывать файл. Скорее, приведенный выше сценарий открывает файл, считывает его содержимое, а затем автоматически закрывает его.

Работа с файлами PDF

Помимо текстовых файлов, нам часто приходится работать с файлами PDF для выполнения различных задач обработки естественного языка. По умолчанию Python не имеет встроенной библиотеки, которую можно использовать для чтения или записи файлов PDF. Скорее мы можем использовать библиотеку PyPDF2.

Прежде чем мы сможем использовать библиотеку PyPDF2, нам необходимо ее установить. Если вы используете установщик pip, вы можете использовать следующую команду для установки библиотеки PyPDF2:

 $ pip install PyPDF2 

В качестве альтернативы, если вы используете Python из среды Anaconda, вы можете выполнить следующую команду в командной строке conda:

 $ conda install -c conda-forge pypdf2 

Примечание . Здесь важно отметить, что PDF-документ может быть создан из различных источников, таких как текстовые документы, изображения и т. Д. В этой статье мы будем иметь дело только с PDF-документами, созданными с помощью текстовых редакторов. Для PDF-документов, созданных с использованием изображений, существуют другие специализированные библиотеки, о которых я расскажу в следующей статье. На данный момент мы будем работать только с PDF-документами, созданными с помощью текстовых редакторов.

В качестве фиктивного документа, с которым можно поиграть, вы можете скачать PDF-файл по этой ссылке:

http://www.bavtailor.com/wp-content/uploads/2018/10/Lorem-Ipsum.pdf

Загрузите документ локально в корень диска «D».

Чтение PDF-документа

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

 import PyPDF2 
 mypdf = open('D:\Lorem-Ipsum.pdf', mode='rb') 

Важно отметить, что при открытии файла PDF необходимо установить режим rb , что означает «чтение двоичного кода», поскольку большинство файлов PDF имеют двоичный формат.

После открытия файла нам нужно будет вызвать PdfFileReader() библиотеки PyPDF2, как показано ниже.

 pdf_document = PyPDF2.PdfFileReader(mypdf) 

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

 pdf_document.numPages 

Поскольку у нас есть только одна страница, в нашем PDF-документе вы увидите 1 на выходе.

Наконец, чтобы извлечь текст из PDF-документа, вам сначала нужно получить страницу PDF-документа с помощью функции getPage() .

Затем вы можете вызвать extractText() чтобы извлечь текст с этой конкретной страницы.

Следующий сценарий извлекает текст с первой страницы PDF-файла и затем печатает его на консоли.

 first_page = pdf_document.getPage(0) 
 
 print(first_page.extractText()) 

На выходе вы должны увидеть текст с первой страницы PDF.

Запись в PDF-документ

Невозможно напрямую записать строки Python в документ PDF с помощью библиотеки PyPDF2 из-за шрифтов и других ограничений. Однако в целях демонстрации мы прочитаем содержимое нашего PDF-документа, а затем запишем это содержимое в другой PDF-файл, который мы создадим.

Давайте сначала прочитаем содержимое первой страницы нашего PDF-документа.

 import PyPDF2 
 
 mypdf = open('D:\Lorem-Ipsum.pdf', mode='rb') 
 pdf_document = PyPDF2.PdfFileReader(mypdf) 
 pdf_document.numPages 
 
 page_one = pdf_document.getPage(0) 

Приведенный выше скрипт читает первую страницу нашего PDF-документа. Теперь мы можем записать содержимое с первой страницы в новый PDF-документ, используя следующий скрипт:

 pdf_document_writer = PyPDF2.PdfFileWriter() 

Приведенный выше сценарий создает объект, который можно использовать для записи содержимого в файл PDF. Сначала мы добавим страницу к этому объекту и передадим ему страницу, полученную из другого PDF-файла.

 pdf_document_writer.addPage(page_one) 

Затем нам нужно открыть новый файл с wb (запись двоичного файла). Открытие файла с такими разрешениями создает новый файл, если он не существует.

 pdf_output_file = open('new_pdf_file.pdf', 'wb') 

Наконец, нам нужно вызвать метод write() для объекта записи PDF и передать ему вновь созданный файл.

 pdf_document_writer.write(pdf_output_file) 

Закройте mypdf и pdf_output_file и перейдите в рабочий каталог программы. Вы должны увидеть в своем редакторе new_pdf_file.pdf Откройте файл, и вы увидите, что он содержит содержимое первой страницы нашего исходного PDF-файла.

Попробуем прочитать содержимое нашего только что созданного PDF-документа:

 import PyPDF2 
 
 mypdf = open(r'C:\Users\Admin\new_pdf_file.pdf', mode='rb') 
 
 pdf_document = PyPDF2.PdfFileReader(mypdf) 
 pdf_document.numPages 
 page_one = pdf_document.getPage(0) 
 
 print(page_one.extractText()) 

Давайте теперь поработаем с большим PDF-файлом. Загрузите файл PDF по этой ссылке:

http://ctan.math.utah.edu/ctan/tex-archive/macros/latex/contrib/lipsum/lipsum.pdf

Сохраните его в своем локальном каталоге. Имя загруженного файла будет «lipsum.pdf».

Выполните следующий сценарий, чтобы увидеть количество страниц в файле:

 import PyPDF2 
 
 mypdf = open(r'D:\lipsum.pdf', mode='rb') 
 pdf_document = PyPDF2.PdfFileReader(mypdf) 
 pdf_document.numPages 

В результате вы увидите 87 распечатанных страниц, поскольку в PDF-файле 87 страниц. Распечатаем все страницы документа на консоли:

 import PyPDF2 
 
 mypdf = open(r'D:\lipsum.pdf', mode='rb') 
 pdf_document = PyPDF2.PdfFileReader(mypdf) 
 
 for i in range(pdf_document.numPages): 
 page_to_print = pdf_document.getPage(i) 
 print(page_to_print.extractText()) 

В результате вы увидите все страницы документа PDF, распечатанные на экране.

Заключение

Чтение и написание текстовых документов - фундаментальный шаг при разработке приложений для обработки естественного языка. В этой статье мы объяснили, как мы можем работать с текстовыми и PDF-файлами с помощью Python. Мы увидели, как читать и писать текстовые и PDF-файлы.

В следующей статье мы начнем обсуждение некоторых других задач НЛП, таких как стемминг, лемматизация, токенизация с помощью библиотеки spaCy.

comments powered by Disqus