mirror of https://github.com/doccano/doccano.git
pythonannotation-tooldatasetsactive-learningtext-annotationdatasetnatural-language-processingdata-labelingmachine-learning
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.
176 lines
4.3 KiB
176 lines
4.3 KiB
<template>
|
|
<layout-text v-if="item.id">
|
|
<template #header>
|
|
<toolbar-laptop
|
|
:doc-id="item.id"
|
|
:enable-auto-labeling.sync="enableAutoLabeling"
|
|
:guideline-text="project.guideline"
|
|
:is-reviewd="item.isConfirmed"
|
|
:total="items.count"
|
|
class="d-none d-sm-block"
|
|
@click:clear-label="clear"
|
|
@click:review="confirm"
|
|
/>
|
|
<toolbar-mobile
|
|
:total="items.count"
|
|
class="d-flex d-sm-none"
|
|
/>
|
|
</template>
|
|
<template #content>
|
|
<v-overlay :value="isLoading">
|
|
<v-progress-circular
|
|
indeterminate
|
|
size="64"
|
|
/>
|
|
</v-overlay>
|
|
<audio-viewer
|
|
:source="item.url"
|
|
class="mb-5"
|
|
/>
|
|
<seq2seq-box
|
|
:text="item.text"
|
|
:annotations="annotations"
|
|
@delete:annotation="remove"
|
|
@update:annotation="update"
|
|
@create:annotation="add"
|
|
/>
|
|
</template>
|
|
<template #sidebar>
|
|
<annotation-progress :progress="progress" />
|
|
<list-metadata :metadata="item.meta" class="mt-4" />
|
|
</template>
|
|
</layout-text>
|
|
</template>
|
|
|
|
<script>
|
|
import _ from 'lodash'
|
|
import LayoutText from '@/components/tasks/layout/LayoutText'
|
|
import ListMetadata from '@/components/tasks/metadata/ListMetadata'
|
|
import ToolbarLaptop from '@/components/tasks/toolbar/ToolbarLaptop'
|
|
import ToolbarMobile from '@/components/tasks/toolbar/ToolbarMobile'
|
|
import AnnotationProgress from '@/components/tasks/sidebar/AnnotationProgress.vue'
|
|
import Seq2seqBox from '~/components/tasks/seq2seq/Seq2seqBox'
|
|
import AudioViewer from '~/components/tasks/audio/AudioViewer'
|
|
|
|
export default {
|
|
|
|
components: {
|
|
AnnotationProgress,
|
|
AudioViewer,
|
|
LayoutText,
|
|
ListMetadata,
|
|
Seq2seqBox,
|
|
ToolbarLaptop,
|
|
ToolbarMobile
|
|
},
|
|
layout: 'workspace',
|
|
|
|
validate({ params, query }) {
|
|
return /^\d+$/.test(params.id) && /^\d+$/.test(query.page)
|
|
},
|
|
|
|
data() {
|
|
return {
|
|
annotations: [],
|
|
items: [],
|
|
project: {},
|
|
enableAutoLabeling: false,
|
|
isLoading: false,
|
|
progress: {}
|
|
}
|
|
},
|
|
|
|
async fetch() {
|
|
this.isLoading = true
|
|
this.items = await this.$services.example.fetchOne(
|
|
this.projectId,
|
|
this.$route.query.page,
|
|
this.$route.query.q,
|
|
this.$route.query.isChecked
|
|
)
|
|
const item = this.items.items[0]
|
|
if (this.enableAutoLabeling) {
|
|
await this.autoLabel(item.id)
|
|
}
|
|
await this.list(item.id)
|
|
this.isLoading = false
|
|
},
|
|
|
|
computed: {
|
|
projectId() {
|
|
return this.$route.params.id
|
|
},
|
|
item() {
|
|
if (_.isEmpty(this.items) || this.items.items.length === 0) {
|
|
return {}
|
|
} else {
|
|
return this.items.items[0]
|
|
}
|
|
}
|
|
},
|
|
|
|
watch: {
|
|
'$route.query': '$fetch',
|
|
enableAutoLabeling(val) {
|
|
if (val) {
|
|
this.list(this.item.id)
|
|
}
|
|
}
|
|
},
|
|
|
|
async created() {
|
|
this.project = await this.$services.project.findById(this.projectId)
|
|
this.progress = await this.$services.metrics.fetchMyProgress(this.projectId)
|
|
},
|
|
|
|
methods: {
|
|
async list(itemId) {
|
|
this.annotations = await this.$services.seq2seq.list(this.projectId, itemId)
|
|
},
|
|
|
|
async remove(id) {
|
|
await this.$services.seq2seq.delete(this.projectId, this.item.id, id)
|
|
await this.list(this.item.id)
|
|
},
|
|
|
|
async add(text) {
|
|
await this.$services.seq2seq.create(this.projectId, this.item.id, text)
|
|
await this.list(this.item.id)
|
|
},
|
|
|
|
async update(annotationId, text) {
|
|
await this.$services.seq2seq.changeText(this.projectId, this.item.id, annotationId, text)
|
|
await this.list(this.item.id)
|
|
},
|
|
|
|
async clear() {
|
|
await this.$services.seq2seq.clear(this.projectId, this.item.id)
|
|
await this.list(this.item.id)
|
|
},
|
|
|
|
async autoLabel(itemId) {
|
|
try {
|
|
await this.$services.seq2seq.autoLabel(this.projectId, itemId)
|
|
} catch (e) {
|
|
console.log(e.response.data.detail)
|
|
}
|
|
},
|
|
|
|
async updateProgress() {
|
|
this.progress = await this.$services.metrics.fetchMyProgress(this.projectId)
|
|
},
|
|
|
|
async confirm() {
|
|
await this.$services.example.confirm(this.projectId, this.item.id)
|
|
await this.$fetch()
|
|
this.updateProgress()
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
.text-pre-wrap {
|
|
white-space: pre-wrap !important;
|
|
}
|
|
</style>
|