从字符串中删除特定字符

时间:2019-08-19 09:49:05

标签: python nlp

我是NLP的新手,正在尝试对我的数据执行一些预处理步骤以进行分类任务。我已经完成了大部分清理工作,但是我现在想删除的文本中仍有一些特殊字符。

文本在数据框中,并且已经被标记和去词迹化,转换为小写,没有停用词,也没有标点符号。 每个文本记录都由单词列表表示。

['​‘the', 'redwood', 'massacre’', 'five', 'adventurous', 'friend', 'visiting', 'legendary', 'murder', 'site', 'redwood', 'hallmark', 'exciting', 'thrilling', 'camping', 'weekend', 'away', 'soon', 'discover', 'they’re', 'people', 'mysterious', 'location', 'fun', 'camping', 'expedition', 'soon', 'turn', 'nightmare', 'sadistically', 'stalked', 'mysterious', 'unseen', 'killer']

我也尝试了以下代码和其他解决方案,但我不明白为什么输出将单词拆分为单个字母,而不是仅仅删除特殊字符,而是将单词保留为紧凑格式。

def remove_character(text):
    new_text=[word.replace('€','') for word in text]
    return new_text

df["Column_name"]=df["Column_name"].apply(lambda x:remove_character(x))

应用此功能后,这是同一文本记录上的输出:

"['[', ""'"", 'â', '', '‹', 'â', '', '˜', 't', 'h', 'e', ""'"", ',', ' ', ""'"", 'r', 'e', 'd', 'w', 'o', 'o', 'd', ""'"", ',', ' ', ""'"", 'm', 'a', 's', 's', 'a', 'c', 'r', 'e', 'â', '', '™', ""'"", ',', ' ', ""'"", 'f', 'i', 'v', 'e', ""'"", ',', ' ', ""'"", 'a', 'd', 'v', 'e', 'n', 't', 'u', 'r', 'o', 'u', 's', ""'"", ',', ' ', ""'"", 'f', 'r', 'i', 'e', 'n', 'd', ""'"", ',', ' ', ""'"", 'v', 'i', 's', 'i', 't', 'i', 'n', 'g', ""'"", ',', ' ', ""'"", 'l', 'e', 'g', 'e', 'n', 'd', 'a', 'r', 'y', ""'"", ',', ' ', ""'"", 'm', 'u', 'r', 'd', 'e', 'r', ""'"", ',', ' ', ""'"", 's', 'i', 't', 'e', ""'"", ',', ' ', ""'"", 'r', 'e', 'd', 'w', 'o', 'o', 'd', ""'"", ',', ' ', ""'"", 'h', 'a', 'l', 'l', 'm', 'a', 'r', 'k', ""'"", ',', ' ', ""'"", 'e', 'x', 'c', 'i', 't', 'i', 'n', 'g', ""'"", ',', ' ', ""'"", 't', 'h', 'r', 'i', 'l', 'l', 'i', 'n', 'g', ""'"", ',', ' ', ""'"", 'c', 'a', 'm', 'p', 'i', 'n', 'g', ""'"", ',', ' ', ""'"", 'w', 'e', 'e', 'k', 'e', 'n', 'd', ""'"", ',', ' ', ""'"", 'a', 'w', 'a', 'y', ""'"", ',', ' ', ""'"", 's', 'o', 'o', 'n', ""'"", ',', ' ', ""'"", 'd', 'i', 's', 'c', 'o', 'v', 'e', 'r', ""'"", ',', ' ', ""'"", 't', 'h', 'e', 'y', 'â', '', '™', 'r', 'e', ""'"", ',', ' ', ""'"", 'p', 'e', 'o', 'p', 'l', 'e', ""'"", ',', ' ', ""'"", 'm', 'y', 's', 't', 'e', 'r', 'i', 'o', 'u', 's', ""'"", ',', ' ', ""'"", 'l', 'o', 'c', 'a', 't', 'i', 'o', 'n', ""'"", ',', ' ', ""'"", 'f', 'u', 'n', ""'"", ',', ' ', ""'"", 'c', 'a', 'm', 'p', 'i', 'n', 'g', ""'"", ',', ' ', ""'"", 'e', 'x', 'p', 'e', 'd', 'i', 't', 'i', 'o', 'n', ""'"", ',', ' ', ""'"", 's', 'o', 'o', 'n', ""'"", ',', ' ', ""'"", 't', 'u', 'r', 'n', ""'"", ',', ' ', ""'"", 'n', 'i', 'g', 'h', 't', 'm', 'a', 'r', 'e', ""'"", ',', ' ', ""'"", 's', 'a', 'd', 'i', 's', 't', 'i', 'c', 'a', 'l', 'l', 'y', ""'"", ',', ' ', ""'"", 's', 't', 'a', 'l', 'k', 'e', 'd', ""'"", ',', ' ', ""'"", 'm', 'y', 's', 't', 'e', 'r', 'i', 'o', 'u', 's', ""'"", ',', ' ', ""'"", 'u', 'n', 's', 'e', 'e', 'n', ""'"", ',', ' ', ""'"", 'k', 'i', 'l', 'l', 'e', 'r', ""'"", ']']"

2 个答案:

答案 0 :(得分:0)

似乎您在这样的单元格中只有一个单词

 private IObservable<TwoFingerDragEventData> CalculateDelta(IObservable<PointerEventData> dragEvent, int pointerId) {

    return dragEvent
      .Where(data => data.pointerId == pointerId)
      .Select(data => data.position)
      .Buffer(2, 1)
      .Select((IList<Vector2> list) => new TwoFingerDragEventData(
        Vector2.Distance(list[0], list[1]),
        list[1] - list[0]
      ))
    ;
  }

因此您不应该使用$ df.head() Column_name 0 ​‘the 1 redwood 2 massacre’ 3 five 4 adventurous 来将单词分成字符-它的工作方式类似于for word in text

您应该仅在for char in text中使用replace(),它将在每个单元格中运行它(类似于apply()循环)

for

最小的工作示例(因此每个人都可以复制并运行它)

df["Column_name"] = df["Column_name"].apply(lambda word: word.replace('€',''))

答案 1 :(得分:0)

您的append.[task1, task2, task...]函数应返回字符串而不是列表。但是,remove_characterpandas上包含str访问器以执行操作on strings,因此您可以使用的另一种选择是

Series

(无需使用df["Column_name"] = df["Column_name"].str.replace('€','')