2017-04-16 8 views
1

Ich arbeite an der Einrichtung einiger verwendbarer Daten für die semantische Analyse. Ich habe ein Korpus von Rohtextdaten, über die ich mich wiederhole. Ich öffne die Daten, lese sie als eine Zeichenkette, spalte sie in eine Liste und bereite die Daten vor, die in einer späteren Funktion in ein Dataset eingebaut werden sollen. Wenn ich jedoch den Datensatz erstelle, enden meine häufigsten Wörter als Interpunktion. Ich muss alle Satzzeichen aus der Liste entfernen, bevor ich die Daten weiter verarbeite.Interpunktion aus der Liste entfernen

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) 

Wenn ich Folgendes tun:

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 

Die Wörter werden aufgeteilt in einzelne Buchstaben. Alle anderen Methoden, die ich versucht habe, sind fehlerhaft.

Antwort

1

Es gibt ein paar Fehler im Code:

  1. str.split() und str.translate() modifizieren nicht vorhanden.
  2. str.translate() erwartet ein Mapping.

zu beheben:

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

Interpunktion Entfernen, kann oder kann nicht tun, was Sie wollen, zum Beispiel Bindestriche werden verkettet. Sie könnten alternativ Satzzeichen identifizieren, die Sie durch ein Leerzeichen ersetzen würden.

+0

Vielen Dank! Das hat genau das getan, was ich brauchte. Und Sie sind auch richtig in der Vorhersage meiner zukünftigen Bedürfnisse, wie Bindestrich Wörter in meine Daten aufgenommen werden müssen. Wie würde ich erklären, welche Interpunktion ersetzt werden soll? – Sabolis

Verwandte Themen