清理文本数据用于NLP任务

时间:2018-05-20 04:51:33

标签: machine-learning text nlp chatbot data-cleaning

今天早上我一直在尝试在康奈尔电影 - 对话语料库数据集上训练聊天机器人,但我面临着清理文本数据以提供给我的算法的问题。 这是文本文件的片段

  

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 +++ $ +++ CAMERON +++ $ +++哇 我只对每个句子最后一部分的对话感兴趣。 如何清理此文件并将其作为csv文档?

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

5 个答案:

答案 0 :(得分:1)

将所有行迭代为字符串。

让我们说你:

  

str =" +++ $ +++ u0 +++ $ +++ m0 +++ $ +++ BIANCA +++ $ +++他们没有!"

你希望把它作为"他们没有!"

喜欢:

  

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

这将为您提供所需的输出。一旦你将欲望输出作为字符串,就在你的.csv文件中逐行写出来。

希望这有帮助。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

代码段

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()方法完成清理工作

答案 3 :(得分:0)

尝试使用此库进行基本清洁:that

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

下面是使用此功能的文档链接。 https://pypi.org/project/textcleaner/

还有许多其他功能可以清除文本数据。

我希望这会有所帮助:)

答案 4 :(得分:0)

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

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.