mirror of https://github.com/doccano/doccano.git
pythondatasetsactive-learningtext-annotationdatasetnatural-language-processingdata-labelingmachine-learningannotation-tool
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.9 KiB
77 lines
1.9 KiB
import { reactive } from '@nuxtjs/composition-api'
|
|
import { TextLabel } from '~/domain/models/tasks/textLabel'
|
|
|
|
export const useTextLabel = (repository: any, projectId: string) => {
|
|
const state = reactive({
|
|
labels: [] as TextLabel[],
|
|
error: ''
|
|
})
|
|
|
|
const validateText = (text: string) => {
|
|
if (state.labels.some((label) => label.text === text)) {
|
|
state.error = 'The label already exists.'
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
const add = async (exampleId: number, text: string) => {
|
|
const textLabel = TextLabel.create(text)
|
|
if (!validateText(textLabel.text)) {
|
|
return
|
|
}
|
|
try {
|
|
await repository.create(projectId, exampleId, textLabel)
|
|
await list(exampleId)
|
|
} catch (e: any) {
|
|
state.error = e.response.data.detail
|
|
}
|
|
}
|
|
|
|
const list = async (exampleId: number) => {
|
|
state.labels = await repository.list(projectId, exampleId)
|
|
}
|
|
|
|
const update = async (exampleId: number, labelId: number, text: string) => {
|
|
if (!validateText(text)) {
|
|
return
|
|
}
|
|
const label = state.labels.find((label) => label.id === labelId)!
|
|
label.updateText(text)
|
|
try {
|
|
await repository.update(projectId, exampleId, labelId, label)
|
|
await list(exampleId)
|
|
} catch (e: any) {
|
|
state.error = e.response.data.detail
|
|
}
|
|
}
|
|
|
|
const remove = async (exampleId: number, labelId: number) => {
|
|
await repository.delete(projectId, exampleId, labelId)
|
|
state.labels = state.labels.filter((label) => label.id !== labelId)
|
|
}
|
|
|
|
const clear = async (exampleId: number) => {
|
|
await repository.clear(projectId, exampleId)
|
|
state.labels = []
|
|
}
|
|
|
|
const autoLabel = async (exampleId: number) => {
|
|
try {
|
|
await repository.autoLabel(projectId, exampleId)
|
|
await list(exampleId)
|
|
} catch (e: any) {
|
|
state.error = e.response.data.detail
|
|
}
|
|
}
|
|
|
|
return {
|
|
state,
|
|
add,
|
|
list,
|
|
update,
|
|
remove,
|
|
clear,
|
|
autoLabel
|
|
}
|
|
}
|