[英]How to change the format of training data for custom NER model retraining using SpaCy?
我正在解決這個問題,其中文本數據位於文檔文件中,生成的 5 個標簽位於 csv 文件中。 因此,要訓練spaCy NER
model,我們必須將 dtaa 標記為:
TRAIN_DATA = [
("Who is Shaka Khan?", {"entities": [(7, 17, "PERSON")]}),
("I like London and Berlin.", {"entities": [(7, 13, "LOC"), (18, 24, "LOC")]}),
]
但我的數據在 csv 文件中,例如:
我寫了一個 function 它將搜索文本中第一次出現的col query
並添加長度。 就像是:
train_data = []
for i,index in enumerate(df.index.tolist()):
row_data = df.iloc[i,:].values.tolist()
entities = {"entities":[]}
for file in dir_files:
if file.split('.')[0] == row_data[0]:
text = preprocess(textract.process("./Training_data/"+file))
for j,entry in enumerate(row_data[1:]):
if not pd.isna(entry):
if isinstance(entry,str): # takes care of null values
entities['entities'].append((text.find(str(entry).strip()),len(str(entry)),ent_names[j]))
結果是
{'entities': [(-1, 7, 'Aggrement Value'),
(-1, 10, 'Aggrement Start Date'),
(-1, 10, 'Aggrement End Date'),
(-1, 4, 'Renewal Notice (Days)'),
(124, 22, 'Party One'),
(540, 45, 'Party Two')]}
它為STRING
提供了不錯的結果,但我在日期方面遇到了一個巨大的問題,因為格式為12.08.2018
,價格為格式6000.00
。 我無法直接比較,所以我必須更改價格str(int(price))
然后匹配。 它會起作用,但日期永遠不會采用 CSV 中給出的格式。 這就像1stDAY OF SEPTEMBER 2018 TWO THOUSAND EIGHTEEN
。 我應該如何以格式標記那個?
我嘗試使用Spacy's
內置 NER 以便我能夠弄清楚,但它並沒有給我帶來好的結果。
nlp = spacy.load('en_core_web_sm')
doc = nlp(preprocess(text))
displacy.render(nlp(doc.text),style='ent',jupyter=True)
它給了我類似的東西:
我如何標記我的數據,因為如果沒有正確標記日期,這一切都是徒勞的,因為無論如何它都不會學會獲取日期。 是否有任何Regular expression RE
或者我看到基於 NLTK POS 的查詢來提取 NER給了我們類似的東西:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.