为 NLP 任务清理文本数据

Cleaning text Data For NLP tasks

今天早上我一直在尝试在 Cornell Movie--Dialogs Corpus 数据集上训练聊天机器人,但我在清理文本数据以输入我的算法时遇到了问题。 这是文本文件的片段

L1045 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ They do not!
L1044 +++$+++ u2 +++$+++ m0 +++$+++ CAMERON +++$+++ They do to!
L985 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ I hope so.
L984 +++$+++ u2 +++$+++ m0 +++$+++ CAMERON +++$+++ She okay?
L925 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ Let's go.

L924 +++$+++ u2 +++$+++ m0 +++$+++ 卡梅伦 +++$+++ 哇 我只对每句话最后部分的对话感兴趣。 我怎样才能清理这个文件并使它成为一个 csv 文件?

数据集Link http://www.cs.cornell.edu/~cristian/Cornell_Movie-Dialogs_Corpus.html

模式就在那里! +++$+++。拆分它,您将获得 CSV 数据。

好吧,您可以使用简单的正则表达式来做到这一点。

代码段

import re
string = "+++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ They do not!"
cleaned = " ".join(re.findall("[a-zA-Z]+", string))
print(cleaned)

输出'u m BIANCA They do not'

在每一行执行它。我建议您将数据转换为 pandas 数据框并使用 .apply() 方法完成清理工作

将所有行作为字符串进行迭代。

假设您有:

str = "+++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ They do not!"

你想输出 "They do not!"

喜欢:

str.split("+++$+++ ")[-1]

这将为您提供所需的输出。一旦您将需求输出为字符串,将它们逐行写入您的 .csv 文件中。

希望对您有所帮助。

试用此库进行基本清理:https://pypi.org/project/textcleaner/

有一个名为 remove_symbols() 的函数,您也可以传递列表而不是文件作为参数。

下面是使用此功能的文档link。 https://yugantm.github.io/textcleaner/documentation.html#remove_symbols

还有很多其他的文本数据清理功能。

希望对您有所帮助:)

您可以使用'+++\$+++'作为分隔符将文本分成几列

df=pd.read_csv('training_data/movie_lines.txt', sep = '\+\+\+$\+\+\+', engine = 'python', header=None)

您将得到如下所示的内容,然后您可以删除不想使用的列。

    0   1   2   3   4
0   L1045   u0  m0  BIANCA  They do not!
1   L1044   u2  m0  CAMERON     They do to!
2   L985    u0  m0  BIANCA  I hope so.
3   L984    u2  m0  CAMERON     She okay?
4   L925    u0  m0  BIANCA  Let's go.

现在删除不需要的列使用:

df.drop(df.columns[0:4], axis=1, inplace=True)

    4
0   They do not!
1   They do to!
2   I hope so.
3   She okay?
4   Let's go.