Rav*_*avi 3 nlp pipeline generator multiprocessing spacy
我看到的使用 spacy 的所有示例都只是在单个文本文件(尺寸很小)中读取。如何将文本文件语料库加载到 spacy 中?
我可以通过腌制语料库中的所有文本来使用 textacy 来做到这一点:
docs = textacy.io.spacy.read_spacy_docs('E:/spacy/DICKENS/dick.pkl', lang='en')
for doc in docs:
print(doc)
Run Code Online (Sandbox Code Playgroud)
但我不清楚如何使用这个生成器对象(文档)进行进一步分析。
另外,我宁愿使用 spacy,而不是 textacy。
spacy 也无法读取单个大文件(~ 2000000 个字符)。
任何帮助表示赞赏...
拉维
所以我终于成功了,并将其保留在这里供子孙后代使用。
从一个生成器开始,这里命名是iterator因为我目前太害怕改变任何东西,因为担心它再次损坏:
def path_iterator(paths):
for p in paths:
print("yielding")
yield p.open("r").read(25)
Run Code Online (Sandbox Code Playgroud)
获取迭代器、生成器或路径列表:
my_files = Path("/data/train").glob("*.txt")
Run Code Online (Sandbox Code Playgroud)
这从上面被包装在我们的 ...函数中,并传递给nlp.pipe. 输入发电机,输出发电机。这里是batch_size=5必需的,否则会陷入先读取所有文件的坏习惯:
doc = nlp.pipe(path_iterator(my_paths), batch_size=5)
Run Code Online (Sandbox Code Playgroud)
重要的是,我们做这一切的原因是,到目前为止还没有发生任何事情。我们不会等待处理一千个文件或其他任何事情。这仅在您开始阅读时按需docs发生:
for d in doc:
print("A document!")
Run Code Online (Sandbox Code Playgroud)
您将看到交替的五个块(我们的batch_size,上面)“Yielding”和“A document”。现在它是一个实际的管道,启动后很快就会开始出现数据。
虽然我目前运行的版本稍旧,但致命一击是多处理:
# For those with these new AMD CPUs with hundreds of cores
doc = nlp.pipe(path_iterator(my_paths), batch_size=5, n_process=64)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6831 次 |
| 最近记录: |