如何在python中编辑.csv以继续NLP
您好,我不太熟悉编程,在研究我的任务时发现Stackoverflow。我想对一个.csv文件进行自然语言处理,该文件看起来像这样,大约有15000行如何在python中编辑.csv以继续NLP,python,csv,nlp,nltk,Python,Csv,Nlp,Nltk,您好,我不太熟悉编程,在研究我的任务时发现Stackoverflow。我想对一个.csv文件进行自然语言处理,该文件看起来像这样,大约有15000行 ID | Title | Body ---------------------------------------- 1 | Who is Jack? | Jack is a teacher... 2 | Who is Sam? | Sam is a dog.... 3 | Who
ID | Title | Body
----------------------------------------
1 | Who is Jack? | Jack is a teacher...
2 | Who is Sam? | Sam is a dog....
3 | Who is Sarah?| Sarah is a doctor...
4 | Who is Amy? | Amy is a wrestler...
我想读取.csv文件并执行一些基本的NLP操作,然后将结果写回新文件或同一文件中。经过一些研究,python和nltk接缝将成为我需要的技术。(我希望是这样)。标记化后,我希望我的.csv文件如下所示
ID | Title | Body
-----------------------------------------------------------
1 | "Who" "is" "Jack" "?" | "Jack" "is" "a" "teacher"...
2 | "Who" "is" "Sam" "?" | "Sam" "is" "a" "dog"....
3 | "Who" "is" "Sarah" "?"| "Sarah" "is" "a" "doctor"...
4 | "Who" "is" "Amy" "?" | "Amy" "is" "a" "wrestler"...
ID | Title | Body
----------------------------------------------------------
1 | "Who" "is" "Jack" "?" | "Jack" "is" "a" "teacher"...
2 | "Who" "is" "Sam" "?" | "Jack" "is" "a" "teacher"...
3 | "Who" "is" "Sarah" "?"| "Jack" "is" "a" "teacher"...
4 | "Who" "is" "Amy" "?" | "Jack" "is" "a" "teacher"...
经过一天的研究和拼凑,我取得了如下成就
ID | Title | Body
-----------------------------------------------------------
1 | "Who" "is" "Jack" "?" | "Jack" "is" "a" "teacher"...
2 | "Who" "is" "Sam" "?" | "Sam" "is" "a" "dog"....
3 | "Who" "is" "Sarah" "?"| "Sarah" "is" "a" "doctor"...
4 | "Who" "is" "Amy" "?" | "Amy" "is" "a" "wrestler"...
ID | Title | Body
----------------------------------------------------------
1 | "Who" "is" "Jack" "?" | "Jack" "is" "a" "teacher"...
2 | "Who" "is" "Sam" "?" | "Jack" "is" "a" "teacher"...
3 | "Who" "is" "Sarah" "?"| "Jack" "is" "a" "teacher"...
4 | "Who" "is" "Amy" "?" | "Jack" "is" "a" "teacher"...
我的第一个想法是读取.csv中的特定单元格,执行一个操作并将其写回同一单元格。然后在所有行上自动执行该操作。显然,我设法读取了一个单元格并将其标记化。但我无法将它写回那个特定的单元格。我远离“自动对所有行执行此操作”。如果可能的话,我将非常感谢您的帮助
我的代码:
import csv
from nltk.tokenize import word_tokenize
############Read CSV File######################
########## ID , Title, Body####################
line_number = 1 #line to read (need some kind of loop here)
column_number = 2 # column to read (need some kind of loop here)
with open('test10in.csv', 'rb') as f:
reader = csv.reader(f)
reader = list(reader)
text = reader[line_number][column_number]
stringtext = ''.join(text) #tokenizing just work on strings
tokenizedtext = (word_tokenize(stringtext))
print(tokenizedtext)
#############Write back in same cell in new CSV File######
with open('test11out.csv', 'wb') as g:
writer = csv.writer(g)
for row in reader:
row[2] = tokenizedtext
writer.writerow(row)
我希望我问的问题是正确的,有人能帮助我 熊猫图书馆将使这一切变得更加容易 pd.read_csv()将更轻松地处理输入,您可以使用pd.DataFrame.apply()将相同的函数应用于列 下面是一个快速示例,说明您需要的关键部件是如何工作的。在.applymap()方法中,您可以用word_tokenize()替换我的lambda函数,从而将其应用于所有元素
In [58]: import pandas as pd
In [59]: pd.read_csv("test.csv")
Out[59]:
0 1
0 wrestler Amy dog is teacher dog dog is
1 is wrestler ? ? Sarah doctor teacher Jack
2 a ? Sam Sarah is dog Sam Sarah
3 Amy a a doctor Amy a Amy Jack
In [60]: df = pd.read_csv("test.csv")
In [61]: df.applymap(lambda x: x.split())
Out[61]:
0 1
0 [wrestler, Amy, dog, is] [teacher, dog, dog, is]
1 [is, wrestler, ?, ?] [Sarah, doctor, teacher, Jack]
2 [a, ?, Sam, Sarah] [is, dog, Sam, Sarah]
3 [Amy, a, a, doctor] [Amy, a, Amy, Jack]
另请参见:首先需要解析文件,然后分别处理(标记化等)每个字段 如果我们的文件真的像你的样本,我不会称之为CSV。您可以使用专门用于读取各种CSV文件的模块对其进行解析:将
delimiter=“|”
添加到CSV.reader()
的参数中,以将行分隔为单元格。(并且不要以二进制模式打开文件。)但您的文件很容易直接解析:
with open('test10in.csv', encoding="utf-8") as fp: # Or whatever encoding is right
content = fp.read()
lines = content.splitlines()
allrows = [ [ fld.strip() for fld in line.split("|") ] for line in lines ]
# Headers and data:
headers = allrows[0]
rows = allrows[2:]
然后,您可以使用
nltk.word\u tokenize()
对行的每个字段进行标记,并从那里继续操作。数据库将更容易,或者对标记的语料库使用json或xml等格式。这将使你更容易进入词性标注或其他标记,因为我看不出存储格式与词性标注有任何关系。数据需要读取和解析,然后单元格的词性标记完全相同。thx用于快速回答。我会尝试一下,并让你知道我的结果:)熊猫帮我读写了一个.csv文件,并在上面做了一些操作。还有一些其他的问题,但我想我必须提出一个新的问题。我对表格的可视化不是很好,我想,这是一个逗号分隔的表格,但我想它也会有同样的效果。谢谢你的回答,我会试试看。这里的人很善良。必须经常呆在这里:)@sim,请牢记这一课:在你的问题中提供不准确的信息会浪费每个人的时间。如果您的数据字段包含字段分隔符的实例(我想在您的情况下是逗号),则需要csv
模块,因为这样会涉及引用。您需要为csv.reader()
提供正确的格式规范。如果你已经这么做了,我不知道你到底想知道你的问题是什么。您的代码似乎不知道如何在行和列之间循环——但要做什么呢?很抱歉造成误解,但正如我前面提到的,我不习惯编程。从现在起,我会尽量说得更具体一些。