gpt4 book ai didi

python - 将 csv 文件中的列加载到 spaCy

转载 作者:太空宇宙 更新时间:2023-11-04 08:42:46 25 4
gpt4 key购买 nike

作为一个整体,我是 spaCy 和 NLTK 的新手,所以如果这看起来是一个愚蠢的问题,我提前道歉。

根据 spaCy 教程,我必须使用以下命令将文本加载到文档中。

doc = nlp(u'Hello, world. Natural Language Processing in 10 lines of code.')

但是,我有很多文本以表格格式存储在 sql server 或 excel 上。它基本上有两列。第一列有一个唯一标识符。第二列有一个简短的文本。

如何将它们加载到 spaCy 中?我是否需要将它们转换为 Numpy 数组或 Pandas 数据框,然后将其加载到文档中?

预先感谢您的帮助!

最佳答案

给定一个这样的 csv 文件:

$ cat test.tsv
DocID Text WhateverAnnotations
1 Foo bar bar dot dot dot
2 bar bar black sheep dot dot dot dot

$ cut -f2 test.tsv
Text
Foo bar bar
bar bar black sheep

在代码中:

$ python
>>> import pandas as pd
>>> pd.read_csv('test.tsv', delimiter='\t')
DocID Text WhateverAnnotations
0 1 Foo bar bar dot dot dot
1 2 bar bar black sheep dot dot dot dot
>>> df = pd.read_csv('test.tsv', delimiter='\t')
>>> df['Text']
0 Foo bar bar
1 bar bar black sheep
Name: Text, dtype: object

在 spacy 中使用管道:

>>> import spacy
>>> nlp = spacy.load('en')
>>> for parsed_doc in nlp.pipe(iter(df['Text']), batch_size=1, n_threads=4):
... print (parsed_doc[0].text, parsed_doc[0].tag_)
...
Foo NNP
bar NN

要使用 pandas.DataFrame.apply():

>>> df['Parsed'] = df['Text'].apply(nlp)

>>> df['Parsed'].iloc[0]
Foo bar bar
>>> type(df['Parsed'].iloc[0])
<class 'spacy.tokens.doc.Doc'>
>>> df['Parsed'].iloc[0][0].tag_
'NNP'
>>> df['Parsed'].iloc[0][0].text
'Foo'

基准测试。

首先将行复制 200 万次:

$ cat test.tsv 
DocID Text WhateverAnnotations
1 Foo bar bar dot dot dot
2 bar bar black sheep dot dot dot dot

$ tail -n 2 test.tsv > rows2

$ perl -ne 'print "$_" x1000000' rows2 > rows2000000

$ cat test.tsv rows2000000 > test-2M.tsv

$ wc -l test-2M.tsv
2000003 test-2M.tsv

$ head test-2M.tsv
DocID Text WhateverAnnotations
1 Foo bar bar dot dot dot
2 bar bar black sheep dot dot dot dot
1 Foo bar bar dot dot dot
1 Foo bar bar dot dot dot
1 Foo bar bar dot dot dot
1 Foo bar bar dot dot dot
1 Foo bar bar dot dot dot
1 Foo bar bar dot dot dot
1 Foo bar bar dot dot dot

[nlppipe.py]:

import time

import pandas as pd
import spacy


df = pd.read_csv('test-2M.tsv', delimiter='\t')
nlp = spacy.load('en')

start = time.time()
for parsed_doc in nlp.pipe(iter(df['Text']), batch_size=1000, n_threads=4):
x = parsed_doc[0].tag_
print (time.time() - start)

[dfapply.py]:

import time

import pandas as pd
import spacy


df = pd.read_csv('test-2M.tsv', delimiter='\t')
nlp = spacy.load('en')

start = time.time()
df['Parsed'] = df['Text'].apply(nlp)

for doc in df['Parsed']:
x = doc[0].tag_
print (time.time() - start)

关于python - 将 csv 文件中的列加载到 spaCy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43451906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com