doccano 无法删除包含大量样本(>500,000)的项目,

xienkqul  于 2个月前  发布在  其他
关注(0)|答案(2)|浏览(48)

你好!非常感谢你使用doccano,它非常好用。

我遇到了一个问题,无法从大型项目(>500,000个样本)中删除所有样本(即“删除所有”按钮)。较小的项目(10,000个样本)可以正常删除(尽管有时删除确实需要约1分钟)。然而,在确认删除后,对于大量样本,什么都不会发生。系统仍然响应,但确认窗口只是保持打开状态,没有任何关于实际操作的反馈。有一次,我让它过夜,以防需要更多时间,但什么都没有发生。删除较少数量的样本(例如,n=10)运行良好。服务器和任务进程没有额外的输出。

我已经尝试使用sqlite3手动删除数据,但无法确切地了解如何操作(我对使用数据库还不太熟悉)。
如果有任何建议,请随时告诉我。

如何重现行为

创建一个包含许多(<500,000)示例的大型项目。尝试使用“删除所有”功能删除所有样本。

你的环境

  • 操作系统:opensuse
  • Python版本:3.10.4
  • 安装doccano的时间:2023年2月24日
  • 你是如何安装doccano的(Heroku按钮等):pip
rhfm7lfc

rhfm7lfc1#

进入删除确认页面也会崩溃,且尚未找到解决方案。

7bsow1i6

7bsow1i62#

@FokWaijyun ,我仍然不知道doccano为什么会在这方面遇到问题,但是如果你真的只是想删除文本,并且你有对数据库的无限制访问权限,你可以手动删除给定项目的项目项,而无需UI,如下所示:

import sqlite3

db_file = "PATH TO YOUR SQLITE DB"
con = sqlite3.connect(db_file)
cur = con.cursor()

# Get the project ID
project_name = "YOUR PROJECT NAME"
project_id = cur.execute(f''' SELECT id FROM projects_project WHERE name="{project_name}"; ''').fetchone()[0]

# Remove examples (i.e., individual texts)
cur.execute(f''' 
    DELETE
    FROM examples_example
    WHERE project_id == {project_id}
''')

# Actually commit the changes
con.commit()

# Close up
con.close()

任何时候,你都可以使用以下命令检查此项目中数据库中的文本数量:

texts = cur.execute(f''' 
    SELECT *
    FROM examples_example
    WHERE project_id == {project_id}
''').fetchall()
print(f"There are {len(texts)} texts in project {project_name}")

我先用这个方法清理了我的项目管理,然后我可以使用UI删除其他所有内容。请注意,如果你还与这些文本关联了标签,那么清理起来就会变得有点复杂。在尝试进行任何“手动”编辑(如此类)之前,最好备份一下你的数据库;)希望这对你有所帮助。

相关问题