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.
147 lines
3.9 KiB
147 lines
3.9 KiB
import 'reflect-metadata'
|
|
import { Expose, Type } from 'class-transformer'
|
|
|
|
export type ProjectType =
|
|
| 'DocumentClassification'
|
|
| 'SequenceLabeling'
|
|
| 'Seq2seq'
|
|
| 'IntentDetectionAndSlotFilling'
|
|
| 'ImageClassification'
|
|
| 'ImageCaptioning'
|
|
| 'BoundingBox'
|
|
| 'Segmentation'
|
|
| 'Speech2text'
|
|
|
|
export class ProjectReadItem {
|
|
id: number
|
|
name: string
|
|
description: string
|
|
guideline: string
|
|
users: number[]
|
|
tags: Object[]
|
|
|
|
@Expose({ name: 'project_type' })
|
|
projectType: ProjectType
|
|
|
|
@Expose({ name: 'updated_at' })
|
|
updatedAt: string
|
|
|
|
@Expose({ name: 'random_order' })
|
|
randomOrder: boolean
|
|
|
|
@Expose({ name: 'collaborative_annotation' })
|
|
collaborative_annotation: boolean
|
|
|
|
@Expose({ name: 'single_class_classification' })
|
|
exclusiveCategories: boolean
|
|
|
|
@Expose({ name: 'resourcetype' })
|
|
resourceType: string
|
|
|
|
@Expose({ name: 'allow_overlapping' })
|
|
allowOverlapping: boolean
|
|
|
|
@Expose({ name: 'grapheme_mode' })
|
|
graphemeMode: boolean
|
|
|
|
@Expose({ name: 'use_relation' })
|
|
useRelation: boolean
|
|
|
|
@Expose({ name: 'is_text_project' })
|
|
isTextProject: boolean
|
|
|
|
@Expose({ name: 'can_define_label' })
|
|
canDefineLabel: boolean
|
|
|
|
@Expose({ name: 'can_define_relation' })
|
|
canDefineRelation: boolean
|
|
|
|
@Expose({ name: 'can_define_span' })
|
|
canDefineSpan: boolean
|
|
|
|
@Expose({ name: 'can_define_category' })
|
|
canDefineCategory: boolean
|
|
|
|
get annotationPageLink(): string {
|
|
const mapping = {
|
|
DocumentClassification: 'text-classification',
|
|
SequenceLabeling: 'sequence-labeling',
|
|
Seq2seq: 'sequence-to-sequence',
|
|
IntentDetectionAndSlotFilling: 'intent-detection-and-slot-filling',
|
|
ImageClassification: 'image-classification',
|
|
ImageCaptioning: 'image-captioning',
|
|
BoundingBox: 'object-detection',
|
|
Segmentation: 'segmentation',
|
|
Speech2text: 'speech-to-text'
|
|
}
|
|
const url = `/projects/${this.id}/${mapping[this.projectType]}`
|
|
return url
|
|
}
|
|
|
|
get taskNames(): string[] {
|
|
if (this.projectType === 'IntentDetectionAndSlotFilling') {
|
|
return ['DocumentClassification', 'SequenceLabeling']
|
|
}
|
|
return [this.projectType]
|
|
}
|
|
}
|
|
|
|
export class ProjectItemList {
|
|
count: number
|
|
next: string | null
|
|
prev: string | null
|
|
|
|
@Type(() => ProjectReadItem)
|
|
@Expose({ name: 'results' })
|
|
items: ProjectReadItem[]
|
|
}
|
|
|
|
export class ProjectWriteItem {
|
|
constructor(
|
|
public id: number,
|
|
public name: string,
|
|
public description: string,
|
|
public guideline: string,
|
|
public project_type: ProjectType,
|
|
public random_order: boolean,
|
|
public collaborative_annotation: boolean,
|
|
public single_class_classification: boolean,
|
|
public allow_overlapping: boolean,
|
|
public grapheme_mode: boolean,
|
|
public use_relation: boolean,
|
|
public tags: string[]
|
|
) {}
|
|
|
|
get resourceType(): string {
|
|
const mapping = {
|
|
DocumentClassification: 'TextClassificationProject',
|
|
SequenceLabeling: 'SequenceLabelingProject',
|
|
Seq2seq: 'Seq2seqProject',
|
|
IntentDetectionAndSlotFilling: 'IntentDetectionAndSlotFillingProject',
|
|
ImageClassification: 'ImageClassificationProject',
|
|
ImageCaptioning: 'ImageCaptioningProject',
|
|
BoundingBox: 'BoundingBoxProject',
|
|
Segmentation: 'SegmentationProject',
|
|
Speech2text: 'Speech2textProject'
|
|
}
|
|
return mapping[this.project_type]
|
|
}
|
|
|
|
toObject(): Object {
|
|
return {
|
|
id: this.id,
|
|
name: this.name,
|
|
description: this.description,
|
|
guideline: this.guideline,
|
|
project_type: this.project_type,
|
|
random_order: this.random_order,
|
|
collaborative_annotation: this.collaborative_annotation,
|
|
single_class_classification: this.single_class_classification,
|
|
allow_overlapping: this.allow_overlapping,
|
|
grapheme_mode: this.grapheme_mode,
|
|
use_relation: this.use_relation,
|
|
tags: this.tags.map((tag) => ({ text: tag })),
|
|
resourcetype: this.resourceType
|
|
}
|
|
}
|
|
}
|