Есть ли способ убрать пунктуацию из персидского текста? - PullRequest
0 голосов
/ 12 мая 2019

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

Я пробовал следующий код:

import string
import re
from numpy import array, argmax, random, take
import pandas as pd

# function to read raw text file
def read_text(filename):
    # open the file
    file = open(filename, mode='rt', encoding='utf-8')

    # read all text
    text = file.read()
    file.close()
    return text

# split a text into sentences
def to_lines(text):
  sents = text.strip().split('\n')
  sents = [i.split('\t') for i in sents]
  return sents


data = read_text("pes.txt")
pes_eng = to_lines(data)
pes_eng = array(pes_eng)

# Remove punctuation
pes_eng[:,0] = [s.translate(str.maketrans('', '', string.punctuation)) for s         
in pes_eng[:,0]]
pes_eng[:,1] = [s.replace("؟!.،,?" ,"") for s in pes_eng]

print(pes_eng)

приведенный выше код работает с английскими предложениями, но ничего не делает с персидскими предложениями.

Здесь вывод:

Traceback (most recent call last):
  File ".\persian_to_english.py", line 29, in <module>
    pes_eng[:,1] = [s.replace("؟!.،,?" ,"") for s in pes_eng]
  File ".\persian_to_english.py", line 29, in <listcomp>
    pes_eng[:,1] = [s.replace("؟!.،,?" ,"") for s in pes_eng]
AttributeError: 'numpy.ndarray' object has no attribute 'replace'

Но я хочу что-то вроде этого:

['Who' 'چه کسی']

1 Ответ

1 голос
/ 12 мая 2019

Вы можете использовать понимание списка, чтобы создать новый список, содержащий то, что вы хотите:

new_pes_eng = [s.replace("؟!.،,?" ,"") for s in pes_eng]

В строке выше удаляются знаки препинания (те, которые в первом аргументе переданы replace()), если таковые имеются, из ваших pes_eng элементов списка.

...