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.
94 lines
2.3 KiB
94 lines
2.3 KiB
<template>
|
|
<v-card
|
|
v-if="isReady"
|
|
v-shortkey="multiKeys"
|
|
@shortkey="addOrRemoveLabel"
|
|
>
|
|
<v-card-title>
|
|
<multi-class-classification
|
|
:labels="items"
|
|
:annotations="currentDoc.annotations"
|
|
:add-label="addLabel"
|
|
:delete-label="removeLabel"
|
|
/>
|
|
</v-card-title>
|
|
<v-card-text class="title highlight" v-text="currentDoc.text" />
|
|
</v-card>
|
|
</template>
|
|
|
|
<script>
|
|
import Vue from 'vue'
|
|
import { mapActions, mapGetters, mapState } from 'vuex'
|
|
import MultiClassClassification from '@/components/organisms/annotation/MultiClassClassification'
|
|
Vue.use(require('vue-shortkey'))
|
|
|
|
export default {
|
|
components: {
|
|
MultiClassClassification
|
|
},
|
|
|
|
computed: {
|
|
...mapState('labels', ['items']),
|
|
...mapState('documents', ['loading']),
|
|
...mapGetters('documents', ['currentDoc']),
|
|
multiKeys() {
|
|
const multiKeys = {}
|
|
for (const item of this.items) {
|
|
multiKeys[item.id] = [item.suffix_key]
|
|
}
|
|
return multiKeys
|
|
},
|
|
isReady() {
|
|
return this.currentDoc && this.items && !this.loading
|
|
}
|
|
},
|
|
|
|
created() {
|
|
this.getLabelList({
|
|
projectId: this.$route.params.id
|
|
})
|
|
},
|
|
|
|
methods: {
|
|
...mapActions('labels', ['getLabelList']),
|
|
...mapActions('documents', ['getDocumentList', 'deleteAnnotation', 'updateAnnotation', 'addAnnotation']),
|
|
removeLabel(annotationId) {
|
|
const payload = {
|
|
annotationId,
|
|
projectId: this.$route.params.id
|
|
}
|
|
this.deleteAnnotation(payload)
|
|
},
|
|
updateLabel(labelId, annotationId) {
|
|
const payload = {
|
|
annotationId,
|
|
label: labelId,
|
|
projectId: this.$route.params.id
|
|
}
|
|
this.updateAnnotation(payload)
|
|
},
|
|
addLabel(labelId) {
|
|
const payload = {
|
|
label: labelId,
|
|
projectId: this.$route.params.id
|
|
}
|
|
this.addAnnotation(payload)
|
|
},
|
|
addOrRemoveLabel(event) {
|
|
const label = this.items.find(item => item.id === parseInt(event.srcKey, 10))
|
|
const annotation = this.currentDoc.annotations.find(item => item.label === label.id)
|
|
if (annotation) {
|
|
this.removeLabel(annotation.id)
|
|
} else {
|
|
this.addLabel(label.id)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
.highlight {
|
|
white-space: pre-wrap;
|
|
}
|
|
</style>
|