从列表中删除标点符号

Remove punctuation from list

我正在为语义分析设置一些可用的数据。我有一个正在迭代的原始文本数据语料库。我打开数据,将其作为字符串读取,拆分为列表,并准备数据以在稍后的函数中构建到数据集中。然而,当我构建数据集时,我最常用的词最终变成了标点符号。在进一步处理数据之前,我需要从列表中删除所有标点符号。

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

单词被拆分成单独的字母。 我尝试过的任何其他方法都出错了。

代码中有几个错误:

  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()

删除标点符号,可能会或可能不会做你想做的事,例如带连字符的单词将连接起来。您也可以确定要用 space.

替换的标点符号