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.
244 lines
6.4 KiB
244 lines
6.4 KiB
<template>
|
|
<v-card>
|
|
<v-card-title>{{ $t('overview.createProjectTitle') }}</v-card-title>
|
|
<v-card-text>
|
|
<v-form v-model="valid">
|
|
<v-item-group
|
|
v-model="selected"
|
|
mandatory
|
|
@change="updateValue('projectType', projectTypes[selected])"
|
|
>
|
|
<v-row no-gutters>
|
|
<v-col v-for="(item, i) in projectTypes" :key="i">
|
|
<v-item v-slot="{ active, toggle }">
|
|
<v-card class="mb-6 me-6" max-width="350" outlined>
|
|
<v-img
|
|
:src="require(`~/assets/images/tasks/${images[i]}`)"
|
|
height="200"
|
|
contain
|
|
@click="toggle"
|
|
/>
|
|
<v-card-title>
|
|
<v-icon v-if="active">
|
|
{{ mdiCheckBold }}
|
|
</v-icon>
|
|
{{ translateTypeName(item, $t('overview.projectTypes')) }}
|
|
</v-card-title>
|
|
</v-card>
|
|
</v-item>
|
|
</v-col>
|
|
</v-row>
|
|
</v-item-group>
|
|
|
|
<v-text-field
|
|
:value="name"
|
|
:rules="projectNameRules($t('rules.projectNameRules'))"
|
|
:label="$t('overview.projectName')"
|
|
outlined
|
|
required
|
|
autofocus
|
|
@input="updateValue('name', $event)"
|
|
/>
|
|
<v-text-field
|
|
:value="description"
|
|
:rules="descriptionRules($t('rules.descriptionRules'))"
|
|
:label="$t('generic.description')"
|
|
outlined
|
|
required
|
|
@input="updateValue('description', $event)"
|
|
/>
|
|
<v-combobox
|
|
:value="tags"
|
|
:items="tags"
|
|
label="Tags"
|
|
multiple
|
|
chips
|
|
outlined
|
|
dense
|
|
deletable-chips
|
|
hide-selected
|
|
@input="updateValue('tags', $event)"
|
|
/>
|
|
<v-checkbox
|
|
v-if="hasSingleLabelOption"
|
|
:value="singleClassClassification"
|
|
:label="$t('overview.allowSingleLabel')"
|
|
@change="updateValue('singleClassClassification', $event === true)"
|
|
/>
|
|
<v-checkbox
|
|
v-if="isSequenceLabelingProject"
|
|
:value="allowOverlapping"
|
|
label="Allow overlapping entity"
|
|
@change="updateValue('allowOverlapping', $event === true)"
|
|
/>
|
|
<v-img
|
|
v-if="isSequenceLabelingProject"
|
|
:src="require('~/assets/project/creation.gif')"
|
|
height="200"
|
|
position="left"
|
|
contain
|
|
/>
|
|
<v-checkbox
|
|
v-if="isSequenceLabelingProject"
|
|
:value="useRelation"
|
|
label="Use relation labeling"
|
|
@change="updateValue('useRelation', $event === true)"
|
|
/>
|
|
<v-checkbox
|
|
v-if="isSequenceLabelingProject"
|
|
:value="graphemeMode"
|
|
@change="updateValue('graphemeMode', $event === true)"
|
|
>
|
|
<template #label>
|
|
<div>
|
|
Count
|
|
<v-tooltip bottom>
|
|
<template #activator="{ on }">
|
|
<a target="_blank" href="https://unicode.org/reports/tr29/" @click.stop v-on="on">
|
|
grapheme clusters
|
|
</a>
|
|
</template>
|
|
Like emoji(🌷, 💩, and 👍), CRLF(\r\n), and so on.
|
|
</v-tooltip>
|
|
as one character
|
|
</div>
|
|
</template>
|
|
</v-checkbox>
|
|
<v-checkbox
|
|
:value="enableRandomOrder"
|
|
:label="$t('overview.randomizeDocOrder')"
|
|
@change="updateValue('enableRandomOrder', $event === true)"
|
|
/>
|
|
<v-checkbox
|
|
:value="enableShareAnnotation"
|
|
:label="$t('overview.shareAnnotations')"
|
|
@change="updateValue('enableShareAnnotation', $event === true)"
|
|
/>
|
|
</v-form>
|
|
</v-card-text>
|
|
<v-card-actions class="ps-4">
|
|
<v-btn
|
|
:disabled="!valid"
|
|
color="primary"
|
|
style="text-transform: none"
|
|
outlined
|
|
@click="$emit('save')"
|
|
>
|
|
{{ $t('generic.create') }}
|
|
</v-btn>
|
|
</v-card-actions>
|
|
</v-card>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import Vue from 'vue'
|
|
import { mdiCheckBold } from '@mdi/js'
|
|
import { projectNameRules, descriptionRules, projectTypeRules } from '@/rules/index'
|
|
|
|
export default Vue.extend({
|
|
props: {
|
|
name: {
|
|
type: String,
|
|
default: '',
|
|
required: true
|
|
},
|
|
description: {
|
|
type: String,
|
|
default: '',
|
|
required: true
|
|
},
|
|
projectType: {
|
|
type: String,
|
|
default: '',
|
|
required: true
|
|
},
|
|
enableRandomOrder: {
|
|
type: Boolean,
|
|
default: false,
|
|
required: true
|
|
},
|
|
enableShareAnnotation: {
|
|
type: Boolean,
|
|
default: false,
|
|
required: true
|
|
},
|
|
singleClassClassification: {
|
|
type: Boolean,
|
|
default: false,
|
|
required: true
|
|
},
|
|
allowOverlapping: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
graphemeMode: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
useRelation: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
tags: {
|
|
type: Array,
|
|
default: () => []
|
|
}
|
|
},
|
|
|
|
data() {
|
|
return {
|
|
valid: false,
|
|
projectNameRules,
|
|
projectTypeRules,
|
|
descriptionRules,
|
|
mdiCheckBold,
|
|
selected: 0
|
|
}
|
|
},
|
|
|
|
computed: {
|
|
projectTypes() {
|
|
return [
|
|
'DocumentClassification',
|
|
'SequenceLabeling',
|
|
'Seq2seq',
|
|
'IntentDetectionAndSlotFilling',
|
|
'ImageClassification',
|
|
'ImageCaptioning',
|
|
'BoundingBox',
|
|
'Segmentation',
|
|
'Speech2text'
|
|
]
|
|
},
|
|
images() {
|
|
return [
|
|
'text_classification.png',
|
|
'sequence_labeling.png',
|
|
'seq2seq.png',
|
|
'intent_detection.png',
|
|
'image_classification.png',
|
|
'image_captioning.jpg',
|
|
'object_detection.jpg',
|
|
'segmentation.jpg',
|
|
'speech_to_text.png'
|
|
]
|
|
},
|
|
hasSingleLabelOption() {
|
|
return ['DocumentClassification', 'ImageClassification'].includes(this.projectType)
|
|
},
|
|
isSequenceLabelingProject() {
|
|
return this.projectType === 'SequenceLabeling'
|
|
}
|
|
},
|
|
|
|
methods: {
|
|
updateValue(key: string, value: string) {
|
|
this.$emit(`update:${key}`, value)
|
|
},
|
|
translateTypeName(type: string, types: string[]): string {
|
|
const index = this.projectTypes.indexOf(type)
|
|
return types[index]
|
|
}
|
|
}
|
|
})
|
|
</script>
|