2016-12-19 1 views
2

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

Мой код:

punct=['!', '#', '"', '%', '$', '&', ')', '(', '+', '*', '-'] 

with open(myFile, "r") as f: 
     text= f.read() 
     remove = '|'.join(REMOVE_LIST) #list of word to remove 
     regex = re.compile(r'('+remove+r')', flags=re.IGNORECASE) 
     out = regex.sub("", text) 

     delta= " ".join(out.split()) 
     txt = "".join(c for c in delta if c not in punct) 

Есть ли способ решить эту проблему?

+0

Вы должны использовать регулярное выражение, в котором вы не хотите [a-zA-Z]. * - [az] быть удаленным – kulssaka

+0

Просто выкинув это, вы пробовали = regex.sub ("", text)? – tnknepp

ответ

3

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

txt = "".join(c for c in delta.replace("-", " ") if c not in punct) 

Это означает, что все переносы в тексте станет пространствами, так что слова будут рассматриваться как отдельные.

+0

Спасибо, Андрей !!! – CosimoCD

0

Вышеуказанный способ может не работать, поскольку вы по-прежнему удаляете все символы штриха ("-") из строки inital. Если вы хотите, чтобы он работал, удалите его из списка punct. Обновленный код выглядит следующим образом:

punct=['!', '#', '"', '%', '$', '&', ')', '(', '+', '*'] 

with open(myFile, "r") as f: 
     text= f.read() 
     remove = '|'.join(REMOVE_LIST) #list of word to remove 
     regex = re.compile(r'('+remove+r')', flags=re.IGNORECASE) 
     out = regex.sub("", text) 

     delta= " ".join(out.split()) 
     txt = "".join(c for c in delta.replace("-", " ") if c not in punct) 

Проблема возникает из-за того, что вы заменяете все символы в Punct с пустой строкой, и вы хотите пространство для «-». Таким образом, вам нужно дважды заменять символы (один раз с пустой строкой и один раз с пробелом).