Удалить знаки препинания из списка

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

import os
import collections
import string
import sys

import tensorflow as tf
import numpy as np
from six.moves import xrange


totalvocab = []

#Loop for: loop through all files in 'Data' directory
for subdir, dirs, files in os.walk('Data'):
for file in files:
    filepath = subdir + os.sep + file
    print(filepath)

    #Function for: open file, convert input to string, split into list
    def read_data(filepath):
        with open(filepath, 'r') as f:
            data = tf.compat.as_str(f.read()).split()
        return data

    #Run function on data, add file data to full data set.
    filevocab = read_data(filepath)
    totalvocab.extend(filevocab)

    filevocab_size = len(filevocab)
    print('File vocabulary size: %s' % filevocab_size)
    totalvocab_size = len(totalvocab)
    print('Total vocabulary size: %s' % totalvocab_size)

Если я сделаю следующее:

def read_data(filepath):
        with open(filepath, 'r') as f:
            data = tf.compat.as_str(f.read())
            data.translate(string.punctuation)
            data.split()
        return data

Слова разбиты на отдельные буквы. Любые другие методы, которые я пробовал, привели к ошибке.


person Sabolis    schedule 16.04.2017    source источник


Ответы (1)


В коде есть пара ошибок:

  1. str.split() и str.translate() не изменяются на месте.
  2. str.translate() ожидает отображения.

Исправить:

def read_data(filepath):
    with open(filepath, 'r') as f:
        data = tf.compat.as_str(f.read())
    data = data.translate(str.maketrans('', '', string.punctuation))
    return data.split()

Удаление знаков препинания может делать или не делать то, что вы хотите, например. слова, написанные через дефис, будут объединены. В качестве альтернативы вы можете определить пунктуацию, которую вы замените пробелом.

person AChampion    schedule 16.04.2017
comment
Большое спасибо! Это сделало именно то, что мне было нужно. И вы также правы, предсказывая мои будущие потребности, так как в мои данные нужно включить слова через дефис. Как я могу объявить, какую пунктуацию заменить? - person Sabolis; 16.04.2017