##好好好好###開源的標註工具

## 開源的標註工具

自然語言處理標記工具彙總
https://blog.csdn.net/wangyizhen_nju/article/details/94559607

spacy原來有兩個標註工具,displaCy-ent和displaCy,一個ner一個依賴關係.

 

Annotator for Chinese Text Corpus (UNDER DEVELOPMENT) 中文文本標註工具

 

自然語言處理的大部分任務是監督學習問題。序列標註問題如中文分詞、命名實體識別,分類問題如關係識別、情感分析、意圖分析等,均需要標註數據進行模型訓練。深度學習大行其道的今天,基於深度學習的 NLP 模型更是數據飢渴。

最前沿的 NLP 技術往往首先針對英文語料。英文 NLP 的生態很好,針對不同有意思的問題都有不少大規模語料公開供大家研究,如斯坦福的 SQuAD 閱讀理解語料。中文方面開源語料就少得多,各種英文 NLP 上的犀利模型和前沿技術都因爲中文語料的匱乏很難遷移過來。

另一方面,對於一些垂直領域,如醫療、金融、法律、公安等等,專有名詞和特有需求甚多,很難將比較 general 的比如在 wikipedia dump 上面訓練的模型直接拿過來用。

傳統人工標註數據的過程往往是繁瑣和低效率的。剛標了一個“聯想”是公司名,又來一個“聯想集團”,再標一次又來一個“聯想集團有限公司”,如此的例子令標註過程含有大量的重複勞動。另一方面也沒有一個易上手的標註 UI,標註工作者往往需要直接按預先定好的格式直接在寫字板之類的軟件中修改原始數據,格式錯誤率也較高。

能不能構建一箇中文文本的標註工具,可以達到以下兩個特點:

\1. 標註過程背後含有智能算法,將人工重複勞動降到最低;

\2. 標註界面顯而易見地友好,讓標註操作儘可能簡便和符合直覺。

答案是可以的。事實上很多標註工具已經做到了這一點,最先進的如 Explosion.ai 的 Prodigy;然而開發了著名的 NLP 開源包 Spacy 的 explosion.ai 選擇了將 Prodigy 閉源,而 Spacy 支持中文也仍然遙遙無期。我們希望構建一個開源的中文文本標註工具,而本文很多的技術靈感正是來自 Prodigy 文檔。

主動學習的智能標註算法
流程:

\1. 用戶標一個label;

\2. 主動學習的後臺算法分爲 online 和 offline 部分。online 部分即時更新模型,可使用諸如 SVM、bag of words 等儘可能快的傳統方法;offline 部分當標註數據積累到一定數量時更新模型,可使用準確度較高的深度學習模型;

\3. 模型更新後,對儘可能多的 example 做預測,將確信度排序,取確信度最低的一個 example 作爲待標註例子。重複 1 的過程。

可以想象如果模型訓練得好的話,這個過程將直接忽略掉確信度最大的那些例子,而把所有重點放在分類邊界上的那些確信度小的例子。這樣可以盡算法所能減少用戶端的人工工作量。

online 與 offline 模型互相協作,與用戶手動標註的過程一起不斷迭代;在最終標註任務完成之後,offline 模型可以重新在所有標註數據上重新訓練,以達到最好的模型效果。

顯而易見的友好標註前端
用戶標註的界面應該儘可能符合直覺,讓用戶完全聚焦在當前的標註任務上。 Prodigy 給了一個非常好的 demo,每一次的標註只需要用戶解決一個 case 的問題。以文本分類爲例,對於算法給出的分類結果,只需要點擊“正確”提供正樣本,“錯誤”提供負樣本,“略過”將不相關的信息濾除,“Redo”讓用戶撤回操作,四個功能鍵以最簡模式讓用戶進行標註操作。

真正應用中,應該還要加入一個用戶自己加入標註的交互方式,比如用戶可以高亮一個詞然後選擇是“公司”,或者鏈接兩個實體選擇他們的關係等等。

 

以上是個人覺得的一個智能中文文本標註工具的最大亮點。算法本身還有很多細節需要思考,比如 online 機器學習算法與 offline 深度學習算法的協作、中文 NLP 的特徵提取與模型構建、正則規則的引入、word embedding 的訓練和使用等等。

系統本身還要考慮後臺存儲(SQLite?)和數據導入導出,前端框架選型和開發,前後端交互(django? flask? RestAPI?)等等的問題。下面是 Prodigy 的簡單架構圖。

 

我們希望專注於中文文本標註的功能。前期我們想實現三種中文 NLP 任務的標註工具:中文命名實體識別,中文關係識別,中文文本分類。未來如果有更多如中文圖片問答、中文圖片描述之類的任務,我們可以再研究加入圖片標註這一塊。

希望這個工具的開發會是以中文社區的開源協作方式,爲整個中文 NLP 的開源生態做出一點貢獻。

Zhong__CentOS7安裝配置Brat
https://blog.csdn.net/anyedianxia/article/details/96832229

中文文本標註工具調研以及BRAT安裝使用

find ztbgg -name '*.txt'|sed -e 's|.txt|.ann|g'|xargs touch

http://brat.nlplab.org/standoff.html

用brat創建的批註以對峙格式存儲在磁盤上:批註與帶批註的文檔文本分開存儲,該工具永遠不會對其進行修改。

對於系統中的每個文本文檔,都有一個對應的註釋文件。例如,該文件:兩個由文件命名約定,他們的基本名稱(無後綴的文件名)是一樣的associatied DOC-1000.ann包含文件的註釋DOC-1000.txt。

在文檔中,各個註釋通過字符偏移量連接到特定的文本範圍。例如,在開始於“今天被...襲擊日本”的文檔中,文本“日本”由偏移範圍0..5標識。(所有偏移量都從0開始索引,並在起始偏移量處包含字符,但在結束偏移量處排除字符。)

臭小子所使用的特定防區味類似於 BioNLP Shared Task防區格式,並在下面進行了詳細描述。

文字檔(.txt)
文本文件應具有後綴.txt,幷包含輸入到系統中的原始文檔的文本。

 

文檔文本存儲在使用UTF-8編碼的純文本文件中 (ASCII的擴展名 -純ASCII文本也起作用)。 文檔文本可能包含換行符,這些換行符將以小標題顯示爲換行符。但是,文檔中不必包含任何換行符:brat可以使用可靠的算法執行自己的句子分段以供顯示。(無論原始文本文檔中是否包含換行符,文本文件本身都不會被修改。)

註釋文件(.ann)
批註以.ann 後綴存儲在文件中。下面討論這些文件中可能包含的各種註釋類型。

通用註釋結構
所有註釋都遵循相同的基本結構:每行包含一個註釋,並且爲每個註釋賦予一個ID,該ID首先出現在該行上,並由一個TAB字符與其餘註釋分開。其餘結構因註釋類型而異。

實體(T1),事件觸發器(T2),事件(E1) 和關係(R1)的註釋示例如下所示。

 


T1  組織0 4 索尼
T2  合併組織14 27 合資企業
T3  組織33 41 愛立信
E1  MERGE-ORG:T2 Org1:T1 Org2:T3
T4  國家75 81 瑞典
R1  原點Arg1:T3 Arg2:T4

這些註釋的詳細說明在下面給出。

文本綁定註釋
綁定文本的註釋是與實體和事件註釋相關的註釋的重要類別。綁定文本的註釋標識特定的文本範圍併爲其指定類型。

 

所有與文本綁定的註釋都遵循相同的結構。與所有註釋一樣,該ID首先出現,並以TAB字符與該行的其餘部分分隔。主要註釋以空格分隔的三元組(類型,起始偏移量,結束偏移量)給出。起始偏移量是文本(“ .txt”文件)中帶註釋的跨度的第一個字符的索引,即,其前面的文檔中的字符數。結束偏移是帶註釋的跨度之後第一個字符的索引。因此,在偏移結束位置中的字符不包括在帶註釋的跨度中。作爲參考,包含由註釋跨越的文本,以TAB字符分隔。

從v1.3開始,小子還支持 不連續的文本綁定註釋,其中註釋涉及多個連續字符。這些註釋的隔離表示是單跨度情況的直接擴展。例如,“北美和南美”的一種可能的註釋將表示如下:

 

形成不連續註釋的(開始偏移,結束偏移)對之間用分號分隔,並且這些跨度的文本由單個空格字符連接起來以形成註釋的參考文本。

註釋ID約定
所有註釋ID均由一個識別註釋類型的大寫字母和一個數字組成。初始ID字符與註釋類型有關,如下所示:

T:文本綁定註釋

R:關係

E:事件

A:屬性

M:修改(屬性的別名,用於向後兼容)

N:規範化[v1.3中的新功能]

#:注意

此外,在特殊情況下,星號(“ *”)可用作ID的佔位符。

實體註釋
每個實體註釋都有一個唯一的ID,並由類型(例如Person或Organization)和包含實體說明的字符範圍(表示爲“開始-結束”偏移對)定義。

 

每行包含一個文本綁定的註釋, 用於標識文本中的實體。

事件註釋
每個事件註釋都有一個唯一的ID,並由類型(例如MERGE-ORG),事件觸發器(說明事件的文本)和參數定義。

 

事件觸發器(標記單詞的註釋或表示每個事件的單詞)是文本綁定的註釋 ,其格式與實體的格式相同。(觸發器的ID與實體的ID佔用相同的空間,並且它們不能重疊。)

對於所有註釋,事件ID首先出現,並用TAB字符分隔。事件觸發器指定爲TYPE:ID,並通過ID標識事件類型及其觸發器。按照約定,事件類型在觸發器註釋和事件註釋中都指定。事件觸發器由SPACE與事件參數分開。事件參數是一組用空格分隔的ROLE:ID對,其中ROLE是事件和任務特定的參數角色之一(例如Theme,Cause,Site),並且ID標識填充該角色的實體或事件。請注意,多個事件可以共享同一觸發器,並且雖然應首先指定事件觸發器,但事件參數可以按任何順序出現。

關係註釋
二進制關係具有唯一的ID,並由其類型(例如Origin,Part-of)及其參數定義。

 

格式與事件所用的格式類似,不同之處在於,註釋未標識表示關係的特定文本(“觸發器”):ID用TAB字符分隔,關係類型和自變量用SPACE分隔。 。

關係參數通常簡單地標識爲Arg1和Arg2,但是系統可以配置爲在對峙表示中使用任何標籤(例如Anaphor 和Antecedent)。

等價關係

系統還支持對等關係的特殊語法。等價關係是對稱的和傳遞的關係,它們將註釋的集合定義爲在某種意義上是等價的(例如,引用相同的現實世界實體)。可以以緊湊的方式將這些關係表示爲等效註釋的ID的以空格分隔的列表。

 

爲了向後兼容現有的防區隔格式,小子還支持特殊的“空” ID值“ * ”用於等價關係註釋。

屬性和修改註釋
屬性註釋是二進制或多值“標誌”,用於指定其他註釋的其他方面。屬性具有唯一的ID,並且通過引用該屬性標記的註釋的ID和屬性值來定義。

 

至於其他註釋,ID用TAB分隔,其他字段用空格分隔。

上面示例中的二進制屬性(例如A1)僅需要指定屬性名稱和已標記註釋的ID:二進制屬性隱含值true。缺少二進制屬性註釋將被解釋爲值爲false的屬性。

多值屬性還指定屬性值,以SPACE分隔。多值屬性的值是完全可配置的。

爲了與現有隔離格式向後兼容,小子還可以識別屬性的ID前綴“ M ”。

規範化註釋
從v1.3開始,支持規範化註釋。每個規範化註釋具有唯一的ID,並通過參考規範化所附加的註釋的ID以及一RID:EID對標識外部資源(RID)和該資源中的條目(EID)的對進行定義。此外,每個規範化註釋都具有類型Reference(當前未定義該類型的其他值)和所引用條目的人類可讀字符串值。

以下示例顯示附加到文本綁定的註釋“ T1”(未顯示)的規範化註釋,並將其與具有Wikipedia ID“ 534366”(“ Barack Obama”)的Wikipedia條目相關聯。

 

(請注意,EID“ Wikipedia”或“ GO” 之類的值與相關外部資源的關聯未在對峙中表示,而是由tools.conf配置文件控制 。)

對於文本綁定的註釋,ID和文本由TAB字符以及其他字段(此處爲“參考”,“ T1”和“ Wikipedia:534366”)分隔,並由SPACE分隔。

註釋註釋
註釋註釋提供了一種將自由格式文本與文檔或特定註釋相關聯的方法。註釋行以數字(或“哈希”)符號#開頭。

 

以#開頭,後跟TAB字符的“ ID” 註釋將附加到特定註釋。對於這些註釋,第二個TAB分隔字段包含註釋類型和註釋附加到的註釋的ID,第三個TAB分隔字段包含註釋文本。

註釋類型可以自由分配,並且可以將任意數量的註釋附加到單個註釋中。(但是,目前只能從臭名昭著的用戶界面中編輯AnnotatorNotes類型的單個註釋。)

 

Part B
brat裏面四個配置文件

annotation.conf: 標註類別

visual.conf: 標註顯示

tools.conf: 標註工具

kb_shortcuts.conf: 快捷鍵

 

annotation.conf 分成四個section:
[entities]
基本結構是

[entities]

Person

Location

Organization

複雜的層級結構如下:

[entities]

Living-thing

Person

Animal

Plant

Nonliving-thing

Building

Vehicle

[relations]
只能表示二元關係,如下:

[relations]

Family Arg1:Person, Arg2:Person

Employment Arg1:Person, Arg2:Organization

當然,每個二元關係中的實體可以是多種類型,如下:

[relations]

Located Arg1:Person, Arg2:Building|City|Country

Located Arg1:Building, Arg2:City|Country

Located Arg1:City, Arg2:Country

[events]
事件與關係有點類似,但是可以是一元到多元的

[events]

Marriage Participant1:Person, Participant2:Person

Bankruptcy Org:Company

[attributes]
屬性可以用來標記其他標記,比如對event標記進行標記,標記類型可以是二值的(true/false)或者多值的,如下:

[attributes]

Negated Arg:<EVENT>

Confidence Arg:<EVENT>, Value:L1|L2|L3

Visual configuration (visual.conf)
可視化分成兩個部分:

[labels]
標籤是用來可視化的,爲了空間考慮,有不同的縮寫形式

[labels]

Organization | Organization | Org

Immaterial-thing | Immaterial thing | Immaterial | Immat

[drawing]
用來控制顯示的顏色,不設置則採用系統默認設置

[drawing]

Person bgColor:#ffccaa

Family fgColor:darkgreen, arrowHead:triangle-5

 

Tool configuration (tools.conf)
標記工具有五個部分:

[options]
有如下選項可以使用

Tokens tokenizer:VALUE, where VALUE=

whitespace: split by whitespace characters in source text (only)

ptblike: emulate Penn Treebank tokenization

mecab: perform Japanese tokenization using MeCab

Sentences splitter:VALUE, where VALUE=

regex: regular expression-based sentence splitting

newline: split by newline characters in source text (only)

Validation validate:VALUE, where VALUE=

all: perform full validation

none: don't perform any validation

Annotation-log logfile:VALUE, where VALUE=

<NONE>: no annotation logging

NAME: log into file NAME (e.g. "/home/brat/work/annotation.log")

下面是一個實例:

[options]

Tokens tokenizer:mecab

Sentences splitter:newline

Validation validate:all

Annotation-log logfile:/home/brat/work/annotation.log

[search]
[search]

Google <URL>:http://www.google.com/search?q=%s

Wikipedia <URL>:http://en.wikipedia.org/wiki/%s

[normalization]
[normalization]

Wiki DB:dbs/wiki, <URL>:http://en.wikipedia.org, <URLBASE>:http://en.wikipedia.org/?curid=%s

UniProt <URL>:http://www.uniprot.org/, <URLBASE>:http://www.uniprot.org/uniprot/%s

[annotators]
[annotators]

SNER-CoNLL tool:Stanford_NER, model:CoNLL, <URL>:http://example.com:80/tagger/

 

[disambiguators]
[disambiguators]

simsem-MUC tool:simsem, model:MUC, <URL>:http://example.com:80/simsem/%s

 

下面是一個小例子:

在data 文件夾下新建目錄stock,包括三個文件

stock

--1.txt 待標記文本

--1.ann 空文件

--annotation.conf 配置文件

配置文件如下:

[entities]

OTH

LOC

NAME

ORG

TIME

TIL

NUM

[relations]

[events]

[attributes]

標註過程如下:

 

 

 

參考文獻:

https://blog.csdn.net/tcx1992/article/details/80580089

http://brat.nlplab.org

FAQ
1. 待標註數據集如何分割?

應該分爲按句子、按段落、按文章三種,寫入配置文件由用戶選擇。 原因是命名實體識別與關係抽取可能按句子或者段落爲單位給用戶標註比較合適;同時可能用戶會有全文章分類的需求,需要給出全文。

2. 爲什麼要使用 online?

用戶標註數據 + offline 標註數據,爲什麼還要使用 online model 更新數據呢?原因是 offline 的模型往往在全量數據上重新學習,也很可能需要使用深度學習模型,訓練的速度會很慢。而 active learning 的人機迭代過程要求模型給出幾乎實時的 stream 級別的訓練和推斷速度,這時候就需要 online model 來先行更新數據。

3. 使用什麼機制觸發 offline model?

這也可以是寫入配置文件的參數。一種是用戶標夠了 100 個或提前設置好的足夠多的新的數據,就可以啓用 offline model 進行訓練;另一種是給用戶一個按鈕,用戶可以點擊啓動後臺的 offline 模型訓練並給出進度條。

4. 系統使用什麼格式的配置文件?

推薦 json 格式的配置文件。請參考一個例子在這裏。

5. AIgo Factory 是什麼?和 User Instance 裏面的部分是不是有點重合?

Algo factory 是算法的代碼模塊,你可以想象一堆 tensorflow 或者 sklearn 的代碼;而 user instance 是 config 文件與模型參數,是一堆用戶生成的 json 文件和模型文件。algo factory 是可以不同 user instance 傳入參數複用的,而每一個 user instance 代表了一個用戶任務的實例。

這樣設計的目的,是儘可能使系統可複用部分模塊化,而抽出用戶具體任務的配置與數據單獨存儲管理。

附錄:幾個開源文本標註工具
• IEPY

整個工程比較完整,有用戶管理系統。前端略重,對用戶不是非常友好。

代碼:https://github.com/machinalis/iepy

說明:http://iepy.readthedocs.io/en/latest/index.html

• DeepDive (Mindtagger)

 

△ Screenshot of Mindtagger precision task in progress

前端比較簡單,用戶界面友好。

介紹:http://deepdive.stanford.edu/labeling

前端代碼:https://github.com/HazyResearch/mindbender

將 DeepDive 的 corenlp 部分轉爲支持中文的代碼嘗試:

https://github.com/SongRb/DeepDiveChineseApps

https://github.com/qiangsiwei/DeepDive_Chinese

https://github.com/mcavdar/deepdive/commit/6882178cbd38a5bbbf4eee8b76b1e215537425b2

• BRAT

 

介紹:http://brat.nlplab.org/index.html

在線試用:http://weaver.nlplab.org/~brat/demo/latest/#/

代碼:https://github.com/nlplab/brat

• SUTDAnnotator
 

用的不是網頁前端而是 pythonGUI,但比較輕量。

代碼:https://github.com/jiesutd/SUTDAnnotator

Paper:https://github.com/jiesutd/SUTDAnnotator/blob/master/lrec2018.pdf

• Snorkel
 

Page: https://hazyresearch.github.io/snorkel/

Github: https://github.com/HazyResearch/snorkel

Demo Paper: https://hazyresearch.github.io/snorkel/pdfs/snorkel_demo.pdf

• Slate

 

 

Code: https://bitbucket.org/dainkaplan/slate/

Paper: http://www.jlcl.org/2011_Heft2/11.pdf

• Prodigy

 

和著名的 spacy 是一家做的。

Website: https://prodi.gy/docs/

Blog: https://explosion.ai/blog/prodigy-annotation-tool-active-learning

招募
中文文本標註工具 Chinese-Annotator,是一個集合了前後端開發和 NLP 算法開發的富有挑戰性的全棧開源項目。

萬事開頭難。前期的開發需要核心團隊協同完成,我們需要你的幫助!

1. 程序架構

程序框架開發,與前後端及算法模塊緊密溝通,定義函數功能,規範接口和參數。 我們希望參考rasa_nlu的用戶配置設計將通用算法模塊和用戶數據隔離開,同時參考iepy的前後端設計和算法尤其是 active learning 部分的設計。

2. 前後端開發

前端使用 vue+flask 構架全棧開發,完成 web 用戶中文文本標註的動態交互。後端業務邏輯支撐和可擴展的數據持久化。

3. NLP 算法模塊開發

傳統 NLP 特徵工程,傳統分類(SVM)和序列標註(CRF,HMM)算法開發,深度學習 NLP 的分類和序列標註算法開發。online 及 offline 算法優化,以及接口 API 開發。

 

Chinese-Annotator Gitter 聊天室
我可以先搞離線的序列標註試試,  

能不能用ChineseAnnotator標註事件?

暫時只是分類模型和序列標註模型的標註。事件可以當做分類模型來看?

你好,有計劃做中文分詞的標註嗎

@ljwh 中文分詞也是序列標註模型,可以做的。計劃把這幾種不同的應用定義好格式,做成標註工具template,直接load就可以用了。

@gwc19880401 歡迎給出一些應用的例子,我們可以根據實際需求來更好地設計後臺算法和前端交互。

依存分析比較重要。不知道大家有沒有標註經驗?

我放一個例子上來。

三個月的寶寶爲啥每天晚上睡着了過了半小時都沒到就哭

這是一個真實的問句。我們的目標是回答這樣的問句。

@crownpku 在序列標註中,可不可以把分詞,句法分析,詞性標註,ner等等融合到一起,一次標註多個標籤

@gwc19880401 依存分析,可否給出你的這個例子的標註結果?

@ljwh 這是個好主意,但可能一次標這麼多會加重標註者的壓力,帶來一些困惑和標註門檻。這個前端交互需要仔細考量一下。

@crownpku 嗯,可以做成可配的

 

現在是什麼進度了??

暫時進展不是很快,最近假期比較多...當前還在做後臺任務調度的一些部分。

項目什麼時候可以跑起來?

現在到什麼程度了?

 

運行docker, 反饋沒有/Chinese-Annotator/chi_annotator/webui/apis/ca.py文件,我也在源代碼中沒有找到相應文件

 

@sunnybest1990 最近大家都很忙 項目還不可用

後續會把部署的腳本全部完成

@JavanTang

運行是需要使用Docker嗎?

 

Jun 06 2018 19:04

這個項目太酷了!直擊現在標註類工具效率低下的痛點,太有價值了

這個項目還在進行嗎? 剛嘗試運行了一下,各種問題,Dockerfile 裏面好幾個地方都沒有配置對, 改完之後django服務起來了,瀏覽器訪問報 page not found。

我也想參加項目,標註是NLP邁過不去的檻

@Anandaely

Jun 26 2018 18:53

很贊,最近在負責一個標註平臺項目,在做一些“基於主動學習算法減少人工標註量,提升文本語料標註效率與準確率的方案探究”,想試試用該方案實踐下

 

 

 

@grzhan

Jun 30 2018 18:31

@crownpku 你好,這邊是森億智能醫療公司的工程師,之前負責公司 NLP 標註系統的研發。 我們的標註系統是取自 brat 的靈感,在公司內已經用了兩年了: 這是目前開源的 Editor:https://github.com/synyi/annotation-tool 現在來看代碼還是有些問題的,最近正在起個新項目重構然後開源。

編輯器基本上是基於 SVG 做的,標註系統本身採用 Angular + Python(Hug) 項目雖然因爲是內部項目當時開發比較匆忙,很多地方沒考慮周全不過所幸基本可用這樣

我們對於 Chinese-Annotator 這個項目非常感興趣,鑑於目前還沒發佈,所以想問問有什麼可用幫忙地方

 

找了半天資料,費了好大勁把項目搭起來。項目現在用的技術很多,我看到webui這邊就分兩種,django和nodejs的,都實現了文本分類,其它好像好沒有找到使用方法。有能幫上忙的請說

@grzhan 你們的產品形態正是我們想要做的

 

@suiyuan2009

Jul 27 2018 18:11

請問現在項目是什麼進度,我們現在在做金融文本上的實體識別和關係識別,目前有什麼好的標註工具嗎?

 

目前我們的標註工具已經重寫並命名爲 Poplar (https://github.com/synyi/poplar ),今天也發佈了一個簡單的 demo:https://synyi.github.io/poplar/ 感興趣的同學也可以看一下,我們會持續開發並維護這個項目,歡迎提交 issue 與 star :)

 

Aug 30 2018 09:56

@playma 首先安裝npm包,然後構造Annotator對象即可

@playma 詳細文檔在這裏 https://github.com/synyi/poplar/blob/master/doc/zh.md

 

@playma 其實不一定需要typescript

@playma 你把所有的類型去掉

@playma 就是普通的js

我下次把文檔改成純js的吧 

@playma

Aug 30 2018 10:06

​ create 一個 html $ create 一個 main.js,把這段複製進去

import {Annotator} from 'poplar-annotation' /**

構造Annotator對象

@param data 數據,可以爲JSON格式或純文本

@param htmlElement 要放置內容的html元素

@param config 配置對象 */ new Annotator(data: string, htmlElement: HTMLElement, config?: Object)

$ node main.js

龍方淞

 

@longfangsong

Aug 30 2018 10:06

@playma js的話這樣啓動

let originString = 'hello world';
let annotator = new Annotator(originString, document.getElementById('test'));
@playma 這是前端的包,你需要加在html裏的<script>裏面,用node跑是沒用的

 

@longfangsong

Aug 30 2018 10:19

@playma 你可以參考下我們的demo

https://github.com/synyi/poplar/tree/demo

是用Vue寫的
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章