Как очистить текст в питоне
Как стереть содержимое файла текстового файла в Python?
У меня есть текстовый файл, который я хочу стереть в Python. Как мне это сделать?
10 ответов
Или, если у вас уже есть открытый файл:
В C ++ вы можете использовать нечто подобное.
Поскольку текстовые файлы являются последовательными, вы не можете напрямую удалять данные на них. Ваши варианты:
Вы не можете «стереть» файл на месте, если вам не нужно стереть конец. Либо довольствуйтесь перезаписью «пустого» значения, либо прочитайте интересующие вас части файла и запишите его в другой файл.
Если для вас важна безопасность, то открытия файла для записи и повторного закрытия будет недостаточно. По крайней мере, некоторая часть информации все еще будет храниться на устройстве хранения и может быть найдена, например, с помощью утилиты восстановления диска.
Предположим, например, что файл, который вы стираете, содержит рабочие пароли и должен быть удален сразу после завершения текущей операции.
Нулевое заполнение файла после его использования помогает уничтожить конфиденциальную информацию.
В недавнем проекте мы использовали следующий код, который хорошо работает для небольших текстовых файлов. Перезаписывает существующее содержимое строками с нулями.
Обратите внимание, что заполнение нулями не гарантирует вашу безопасность. Если вы действительно обеспокоены, лучше заполнить нулями и использовать специализированную утилиту, например File Shredder или CCleaner, чтобы очистить« пустое »пространство на вашем диске.
Вы должны перезаписать файл. В C ++:
От пользователя @jamylak альтернативная форма open(«filename»,»w»).close()
Открытие файла в режиме «запись» очищает его, вам не нужно специально писать в него:
(вы должны закрыть его, поскольку время, когда файл закрывается автоматически, может зависеть от реализации)
Не полный ответ, а скорее продолжение ответа Ондры
5 Сопособов убрать ненужные символы из строки на Python
Воспользуемся ‘ str.replace ‘
С поомщью str.replace мы можем менять какие-то символы на другие. Если мы просто хотим убрать какие-то символы, тогда просто заменяем их на пустую строку. str.replace() будет применять замену ко всем найденным совподениям.
Если мы можем указать ограничение для количества совпадений, чтобы не убирать все символы.
С помощью ‘ re.sub ‘
re. sub (pattern, repl, string, count=0, flags=0)
Возвращает строку, полученную путем замены крайних левых неперекрывающихся
совпадений с шаблоном в строке на значение repl. Если совпадения с шаблоном
не найдены, возвращается неизмененная строка
— Из документации Python’а
Если мы хотим убрать символы, то просто заменяем совпадения на пустую строку.
Убрать все символы, кроме букв
С помощью ‘isalpha()’
isalpha() используется для того, чтобы проверять, состоит ли строка только из букв. Возвращает True если является буквой. Мы будем проходить по каждому символу строки и проверять является ли он буквой.
Пример
(c for c in s if c.isalpha())
Перед нами объект генератор, содержащий все буквы из строки:
s1=””.join(c for c in s if c.isalpha())
””.join будет соединять все символы в одну строку.
С помощью ‘filter()’
f = filter(str.isalpha, s)
Функция filter() вернет итератор, содержащий все буквы переданной строки, а join() будем «склеиват» все элементы друг с другом.
С помощью ‘re.sub()’
Рассмотрим s1 = re.sub(“[^A-Za-z]”, ””, s)
Убрать все символы, кроме букв и чисел
С помощью ‘isalnum()’
isalnum() используется, когда мы хотим определить состоит строка только из чисел или букв.
Пройдемся по каждому символу строки, что-бы выявить нужные символы.
С помощью ‘re.sub()’
Убрать все числа из строки, с помощью регулярных выражений
С помощью ‘re.sub()’
Убираем все символы из строки кроме цифр
С помощью ‘isdecimal()’
isdecimal() возвращает истину, если все символы строки являются цифрами, в противном случае возвращается ложь.
Пороходим по каждому символу строки и проверяем и является ли он цифрой. «».join() соединяет все элементы.
С помощью ‘re.sub()’
Рассмотрим s1 = re.sub(“[^0–9]”, ””, s)
С помощью ‘filter()’
Рассмотрим f = filter(str.isdecimal, s)
Примечание
Строки в Python являются неизменяемыми объектами, поэтому все вышеуказаные методы убирает символы из данной строки и возвращает новую, они не меняют состояние оригинальной строки.
Очистка файла
Иногда возникают ситуации, когда надо произвести запись в файл, в котором уже находятся данные. Или просто удалить все содержимое. Рассмотрим, как выполнить очистку этого файла средствами Python 3.
Способы
Очистить файл в Python 3 можно следующими способами:
Рассмотрим эти варианты подробно.
При открытии
Когда файл открывается на запись, то указатель текущего положения в документе может быть расположен в начале или в конце документа. Если указатель в конце, то данные будут дописываться. Нас же интересует вариант, когда указатель расположен в начале.
Здесь w – указывает режим открытия файла на запись в текстовом режиме с размещением указателя в начале. После выполнения этого кода, если существовал указанный файл, то содержимое его очистится. Если его не было, то создастся новый пустой.
Перед закрытием, можно было добавить информацию. Она будет записана с начала файла, а не дописана в конец.
Если надо записывать данные в бинарный файл, то следует использовать режим “wb”.
Если же наоборот, нам нужно добавить информацию в конец файла. При этом старые данные чтобы остались. В этом случае к режиму следует добавить символ +. Режим открытия текстового документа будет “w+”, а бинарного “wb+”.
Дополнительную информацию по режимам открытия можно получить в отдельной статье на нашем сайте.
Перемещение указателя
Если мы открыли файл на запись и не знаем, в каком месте находится указатель. Возможно, мы уже записали какие то данные. Мы можем просто переместить указатель в начало и закрыть его. В этом случае документ будет пустым.
В этом примере открытие сделали специально в режиме дозаписи. После закрытия, даже если в файле были данные, они удалятся.
Вот еще пример, здесь мы записываем данные, потом переносим указатель в начало. После этого еще раз производим запись. В итоге, в конце работы, в файле будет только последняя сделанная запись. Те данные, которые были внесены вначале, благополучно удалятся.
Средствами ОС
Для очистки с помощью средств операционной системы воспользуемся стандартной библиотекой os. Вначале её надо подключить с помощью инструкции import os.
На linux должно пройти следующим образом.
Можно воспользоваться командами cp или cat. Вот пример решения с помощью cat.
Если код исполняется на Windows, то решение может быть таким:
Как очистить текст для машинного обучения с Python
Дата публикации 2017-10-18
Вы не можете перейти от простого текста к подходящей модели машинного обучения или глубокого обучения.
Сначала вы должны очистить текст, что означает разделение его на слова и обработку знаков препинания и регистра.
На самом деле, вам может понадобиться целый набор методов подготовки текста, и выбор методов действительно зависит от вашей задачи обработки естественного языка.
В этом уроке вы узнаете, как вы можете очистить и подготовить текст, готовый к моделированию с помощью машинного обучения.
После завершения этого урока вы узнаете:
Обзор учебника
Этот урок разделен на 6 частей; они есть:
Метаморфоза Франца Кафки
Давайте начнем с выбора набора данных.
В этом уроке мы будем использовать текст из книгиметаморфозаотФранц Кафка, Никакой конкретной причины, кроме ее краткости, мне это нравится, и она может вам понравиться. Я ожидаю, что это одна из тех классических вещей, которые большинство учеников должны читать в школе.
Полный текст «Метаморфозы» можно бесплатно получить в Project Gutenberg.
Вы можете скачать текстовую версию ASCII текста здесь:
Загрузите файл и поместите его в текущий рабочий каталог с именем файла «metamorphosis.txt«.
Файл содержит информацию из верхнего и нижнего колонтитула, которая нам не интересна, в частности информацию об авторских правах и лицензии. Откройте файл и удалите информацию верхнего и нижнего колонтитула и сохраните файл как «metamorphosis_clean.txt«.
Начало чистого файла должно выглядеть так:
Однажды утром, когда Грегор Самса проснулся от смутных снов, он обнаружил, что превратился в своей постели в ужасных паразитов.
Файл должен заканчиваться на:
И, как будто в подтверждение своих новых мечтаний и благих намерений, как только они достигли своей цели, Грета первой встала и растянула свое молодое тело.
Очистка текста зависит от конкретной задачи
После того, как вы фактически овладели вашими текстовыми данными, первый шаг в очистке текстовых данных состоит в том, чтобы иметь четкое представление о том, чего вы пытаетесь достичь, и в этом контексте просмотрите свой текст, чтобы увидеть, что именно может помочь.
Найдите минутку, чтобы посмотреть на текст. Что ты заметил?
Я уверен, что к тренированному глазу происходит гораздо больше.
В этом уроке мы рассмотрим основные этапы очистки текста.
Тем не менее, рассмотрим некоторые возможные цели, которые мы можем иметь при работе с этим текстовым документом.
Используйте вашу задачу в качестве объектива, с помощью которого можно выбрать, как подготовить ваши текстовые данные.
Ручная токенизация
Очистка текста трудна, но текст, который мы выбрали для работы, уже довольно чистый.
Мы могли бы просто написать код Python, чтобы очистить его вручную, и это хорошее упражнение для тех простых проблем, с которыми вы сталкиваетесь. Такие инструменты, как регулярные выражения и разбиение строк, могут проделать долгий путь.
1. Загрузить данные
Давайте загрузим текстовые данные, чтобы мы могли работать с ними
Текст небольшой и загружается быстро и легко помещается в память. Это не всегда так, и вам может потребоваться записать код в карту памяти файла. Такие инструменты, как NLTK (рассматривается в следующем разделе), значительно упростят работу с большими файлами.
Мы можем загрузить весьmetamorphosis_clean.txtВ память следующим образом:
Выполнение примера загружает весь файл в память, готовую к работе.
2. Разделить пробелами
Чистый текст часто означает список слов или токенов, с которыми мы можем работать в наших моделях машинного обучения.
Это означает преобразование необработанного текста в список слов и сохранение его снова.
Выполнение примера разбивает документ на длинный список слов и печатает первые 100 для рассмотрения.
Мы видим, что пунктуация сохраняется (например, «не было» а также «бронебойный как«), Что приятно. Мы также видим, что пунктуация в конце предложения сохраняется с последним словом (например, «думал.)), Что не очень хорошо.
3. Выберите слова
Другой подход может состоять в том, чтобы использовать модель regex (re) и разбивать документ на слова, выбирая строки буквенно-цифровых символов (a-z, A-Z, 0-9 и ‘_’).
Опять же, запустив пример, мы видим, что мы получили наш список слов. На этот раз мы видим, что «бронебойный какТеперь два словаброня» а также «лайк(Хорошо), но сокращения каккакой«Также два слова»Какие» а также «s» (не хорошо).
3. Разделить пробелами и удалить пунктуацию
Примечание. Этот пример был написан для Python 3.
Мы можем хотеть слова, но без знаков препинания, таких как запятые и кавычки. Мы также хотим сохранить сокращения вместе.
Одним из способов будет разделить документ на слова по пробелам (как в «2. Разделить пробелами“), Затем используйте перевод строки, чтобы заменить все знаки препинания ничем (например, удалите их).
Python предоставляет константу с именемstring.punctuationэто обеспечивает большой список знаков препинания. Например:
Python предлагает функцию под названиемпереведите()это сопоставит один набор символов другому.
Мы можем использовать функциюmaketrans ()создать таблицу сопоставления. Мы можем создать пустую таблицу сопоставления, но третий аргумент этой функции позволяет нам перечислить все символы, которые нужно удалить в процессе перевода. Например:
Мы можем собрать все это вместе, загрузить текстовый файл, разбить его на слова по пробелам, а затем перевести каждое слово, чтобы убрать пунктуацию.
Мы видим, что это дало желаемый эффект, в основном.
Сокращения типа «какой» стал «Что» но «бронебойный как» стал «armourlike«.
Если вы знаете что-нибудь о регулярных выражениях, то вы знаете, что здесь все может быть сложно.
4. Нормализующий случай
Распространено преобразовывать все слова в один случай.
Это означает, что словарный запас уменьшится в размере, но некоторые различия будут потеряны (например, «яблоко«Компания против»яблоко«Фрукт является широко используемым примером).
Мы можем преобразовать все слова в строчные, вызывая функцию lower () для каждого слова.
Запустив пример, мы видим, что все слова теперь строчные.
Заметка
Очистка текста действительно сложна, специфична для проблемы и полна компромиссов.
Помните, просто лучше.
Более простые текстовые данные, более простые модели, меньшие словари. Позже вы всегда можете сделать вещи более сложными, чтобы увидеть, приведет ли это к улучшению навыков модели.
Далее мы рассмотрим некоторые инструменты в библиотеке NLTK, которые предлагают больше, чем простое разбиение строк.
Токенизация и очистка с помощью NLTK
Он предоставляет хорошие инструменты для загрузки и очистки текста, которые мы можем использовать для подготовки наших данных для работы с алгоритмами машинного обучения и глубокого обучения.
1. Установите НЛТК
Вы можете установить NLTK с помощью вашего любимого менеджера пакетов, такого как pip:
После установки вам нужно будет установить данные, используемые библиотекой, в том числе большой набор документов, которые вы сможете использовать позже для тестирования других инструментов в NLTK.
Есть несколько способов сделать это, например, из скрипта:
Или из командной строки:
2. Разделить на предложения
Некоторые задачи моделирования предпочитают, чтобы ввод был в форме абзацев или предложений, таких как word2vec Сначала вы можете разбить текст на предложения, разбить каждое предложение на слова, а затем сохранить каждое предложение в файл, по одному в строке.
НЛТК обеспечиваетsent_tokenize ()функция для разделения текста на предложения.
Пример ниже загружаетmetamorphosis_clean.txt”Файл в память, разбивает его на предложения и печатает первое предложение.
При выполнении примера мы видим, что, хотя документ разбит на предложения, каждое предложение сохраняет новую строку из искусственного переноса строк в исходном документе.
Однажды утром, когда Грегор Самса проснулся от тревожных снов, он обнаружил,
сам превратился в своей постели в ужасных паразитов.
3. Разделить на слова
NLTK предоставляет функцию под названиемword_tokenize ()для разбиения строк на токены (номинально слова).
Он разбивает токены на основе пробелов и знаков препинания. Например, запятые и точки считаются отдельными токенами. Сокращения разделены (например, «какойСтановитсяКакие«‘s«). Цитаты сохраняются и так далее.
Запустив код, мы видим, что знаки препинания теперь являются токенами, которые мы могли бы затем специально отфильтровать.
4. Отфильтруйте пунктуацию
Мы можем отфильтровать все токены, которые нам не интересны, такие как все отдельные знаки препинания.
Это можно сделать, выполнив итерацию по всем токенам и сохранив только те токены, которые являются буквенными. Python имеет функциюISALPHA ()это можно использовать. Например:
Запустив пример, вы можете увидеть не только знаки препинания, но и примеры типа «бронебойный как» а также ««sБыли также отфильтрованы.
5. Отфильтруйте стоп-слова (и конвейер)
Стоп словаэто те слова, которые не способствуют более глубокому значению фразы.
Это самые распространенные слова, такие как: « «,» «, а также «является«.
Для некоторых приложений, таких как классификация документации, возможно, имеет смысл удалить стоп-слова.
NLTK предоставляет список общепринятых стоп-слов для различных языков, таких как английский. Они могут быть загружены следующим образом:
Вы можете увидеть полный список следующим образом:
Вы можете видеть, что все они в нижнем регистре и пунктуация удалена.
Вы можете сравнить свои токены со стоп-словами и отфильтровать их, но вы должны убедиться, что ваш текст подготовлен таким же образом.
Давайте продемонстрируем это с помощью небольшого конвейера подготовки текста, включающего:
Запустив этот пример, мы увидим, что в дополнение ко всем другим преобразованиям, остановим слова типа « » а также «в» был удален.
Отмечу, что у нас все еще остались токены типа «нт«. Кроличья нора глубокая; всегда можно сделать больше
6. Стволовые слова
Морфологическийотносится к процессу сокращения каждого слова до его корня или основания.
Например «ловля рыбы, «»выудил, «»рыболов«Все сводят к стеблю»рыба«.
Некоторые приложения, такие как классификация документов, могут выиграть от сокращения, чтобы как уменьшить словарный запас, так и сосредоточиться на смысле или ощущении документа, а не на более глубоком значении.
Существует много алгоритмов стемминга, хотя популярным и давним методом является алгоритм Портера Стемминга. Этот метод доступен в NLTK черезPorterStemmerучебный класс.
Запустив пример, вы можете увидеть, что слова были сведены к их основам, таким как «беда» стал «troubl«. Вы также можете увидеть, что реализация стемминга также уменьшила токены до строчных букв, вероятно, для внутреннего поиска в таблицах слов.
Вы также можете увидеть, что реализация стемминга также уменьшила токены до строчных букв, вероятно, для внутреннего поиска в таблицах слов.
В NLTK есть хороший набор алгоритмов обобщения и лемматизации, если для вашего проекта вам нужно сократить слова до их корня.
Дополнительные соображения по очистке текста
Мы только начинаем.
Поскольку исходный текст для этого руководства был достаточно чистым для начала, мы пропустили много проблем очистки текста, с которыми вам, возможно, придется столкнуться в своем собственном проекте.
Вот краткий список дополнительных соображений при очистке текста:
Список можно продолжать.
Надеюсь, вы видите, что получить действительно чистый текст невозможно, что мы действительно делаем все возможное, основываясь на времени, ресурсах и знаниях, которые у нас есть.
Идея «чистого» действительно определяется конкретной задачей или задачей вашего проекта.
В идеале вы должны сохранять новый файл после каждого преобразования, чтобы вы могли проводить время со всеми данными в новой форме. Вещи всегда бросаются в глаза, когда вам нужно время, чтобы просмотреть ваши данные.
Вы делали некоторую очистку текста раньше? Какой вам предпочтительнее конвейер преобразований?
Позвольте мне знать в комментариях ниже.
Советы по очистке текста для встраивания слов
В последнее время область обработки естественного языка отходит от моделей мешков слова и кодирования слов к встраиванию слов.
Преимущество встраивания слов заключается в том, что они кодируют каждое слово в плотный вектор, который отражает что-то относительно его относительного значения в обучающем тексте.
Это означает, что такие варианты слов, как регистр, орфография, пунктуация и т. Д., Автоматически научатся быть похожими в пространстве вложения. В свою очередь, это может означать, что объем очистки, требуемый от вашего текста, может быть меньше и, возможно, совсем отличаться от классической очистки текста.
Например, больше не имеет смысла вставлять слова или удалять знаки препинания для сокращений.
Ниже приводится его ответ на вопрос о том, как лучше всего подготовить текстовые данные для word2vec.
Универсального ответа нет. Все зависит от того, для чего вы планируете использовать векторы. По моему опыту, обычно хорошо отключать (или удалять) знаки препинания со слов, а иногда также преобразовывать все символы в нижний регистр. Можно также заменить все числа (возможно, больше, чем некоторая константа) на какой-то один токен, например.
Все эти этапы предварительной обработки направлены на уменьшение размера словарного запаса без удаления какого-либо важного содержимого (что в некоторых случаях может не соответствовать действительности, когда вы вводите определенные слова в нижнем регистре, т.е. «Буш» отличается от «куста», тогда как «Другой» обычно имеет в том же смысле, что и «другой»). Чем меньше словарный запас, тем ниже сложность памяти и тем надежнее параметры оцениваемых слов. Вы также должны предварительно обработать тестовые данные таким же образом.
Одним словом, вы поймете все это намного лучше, если будете проводить эксперименты.
Дальнейшее чтение
Этот раздел предоставляет больше ресурсов по этой теме, если вы хотите углубиться.
Резюме
В этом уроке вы узнали, как чистить текст или машинное обучение в Python.
В частности, вы узнали:
У вас есть вопросы?
Задайте свои вопросы в комментариях ниже, и я сделаю все возможное, чтобы ответить.
У вас есть опыт очистки текста?
Пожалуйста, поделитесь своим опытом в комментариях ниже.
Как удалить содержимое файла текстового файла в Python?
У меня есть текстовый файл, который я хочу стереть в Python. Как мне это сделать?
10 ответов
или, в качестве альтернативы, если у вас уже открыт файл:
В C++ вы можете использовать что-то подобное.
не полный ответ больше расширения на ответ Ондры
открытие файла в режиме «запись» очищает его, вам не нужно специально писать ему:
(вы должны закрыть его, так как время автоматического закрытия файла может быть специфичным для реализации)
вы должны перезаписать файл. В C++:
от пользователя @jamylak альтернативная форма open(«filename»,»w»).close() is
присвоение указателя файла null внутри вашей программы просто избавится от этой ссылки на файл. Файл все еще там. Я думаю, что В С stdio.h это то, что вы ищете там. Не уверен насчет Python.
вы не можете «стереть» из файла на месте, если вам не нужно стереть конец. Либо удовлетворитесь перезаписью «пустого» значения, либо прочитайте части файла, о котором вы заботитесь, и запишите его в другой файл.
поскольку текстовые файлы являются последовательными, вы не можете сразу стереть данные на них. Ваши варианты:
посмотреть seek / truncate функция / метод для реализации любой из вышеперечисленных идей. Как Python и C имеют эти функции.
Если безопасность важна для вас, то открытия файла для записи и закрытия его снова будет недостаточно. По крайней мере, часть информации по-прежнему будет на устройстве хранения и может быть найдена, например, с помощью утилиты восстановления диска.
предположим, например, что файл, который вы стираете, содержит производственные пароли и должен быть удален сразу после завершения текущей операции.
Zero-заполнение файла после завершения его использования помогает убедитесь, что конфиденциальная информация уничтожена.
в недавнем проекте мы использовали следующий код, который хорошо работает для небольших текстовых файлов. Он перезаписывает существующее содержимое строками нулей.
обратите внимание, что нулевое заполнение не гарантирует вашу безопасность. Если вы действительно обеспокоены, вам лучше всего заполнить ноль и используйте специальную утилиту, такую как Файл-Шреддер или CCleaner чтобы протирать ‘пустое’ пространство ваш диск.







