[英]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.