在显然已成功加载Spacy的笔记本中的Azure上的Databricks上。
使用Matcher迭代传递给它的文档时出现以下代码错误。jsonschema被声明为丢失,但在检查时,jsonschema已安装,并且也使用安装
%sh
pip install jsonschema
以及后来使其成为特定版本的
%sh
pip install 'jsonschema>=2.6.0,<3.1.0'
两者都已成功安装。
这是错误消息:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<command-3008938145872993> in <module>
---> 12 ALL_DATA_tmp = [parse_train_data_sorted(d) for d in nlp.pipe(text_tmp_ls) ]
13 ALL_DATA = ALL_DATA + ALL_DATA_tmp
14 print(f'length ALL_DATA : {len(ALL_DATA)}')
<command-3008938145872993> in <listcomp>(.0)
10 #ALL_DATA_tmp = [parse_train_data(d) for d in
nlp.pipe(text_tmp_ls) ]
11
---> 12 ALL_DATA_tmp = [parse_train_data_sorted(d) for d in nlp.pipe(text_tmp_ls) ]
13 ALL_DATA = ALL_DATA + ALL_DATA_tmp
14 print(f'length ALL_DATA : {len(ALL_DATA)}')
<command-3008938145872990> in parse_train_data_sorted(doc)
27 prev_end = -1
28
---> 29 detections_unsorted = iterate_matchers(doc)
30
31 detections_sorted = sorted(detections_unsorted, key=lambda element: (element[1], element[2]))
<command-3008938145872990> in iterate_matchers(doc)
5 '''
6 detections = []
----> 7 matcher = Matcher(nlp.vocab, validate=True)
8 matcher.add("STANDARDS_9239", None, *create_patterns_9239())
9 detections = detections + [(doc[start:end].start_char, doc[start:end].end_char, 'STANDARD_9239') for idx, start, end in matcher(doc)]
matcher.pyx in spacy.matcher.matcher.Matcher.__init__()
/databricks/python/lib/python3.7/site-packages/spacy/util.py in get_json_validator(schema)
744 # TODO: replace with (stable) Draft6Validator, if available
745 if jsonschema is None:
--> 746 raise ValueError(Errors.E136)
747 return jsonschema.Draft4Validator(schema)
748
ValueError: [E136] This additional feature requires the jsonschema library to be
installed:
pip install jsonschema
我这样解决了问题:
- 在Databricks中定义Spacy库,确保未选择自动安装
蓝色spacy链接应指向以下内容:https://pypi.org/project/spacy/
- 启动版本7的ML集群。一旦开始
导航到库,然后手动选择并单击"在群集上安装"。
-
现在打开笔记本并运行单元格,
%sh
pip-install'jsonschema>2.6.0,<3.1.0’
-
在下一个单元格中运行
%sh
python-m spacy验证
这证实了集群上存在Spacy,但没有模型
-
在下一个单元格中安装型号
%sh
python-m spacy下载en_core_web_md
-
验证模型现在存在。
%sh
python-m spacy验证
-
在下一个单元格中运行以下导入python代码
导入spacy
导入json
8。在下一个单元运行和加载(在我的情况下(中等大小的英文模型时,您可能会为您的应用程序加载和运行不同大小的模型和语言。请参阅Spacy网站了解确切名称。
nlp = spacy.load("en_core_web_md")
9.最后,失败的代码现在可以工作了。
稍后,以前出错的代码现在可以工作了。
row_step =20
ALL_DATA = []
for i in range (0,df.shape[0] , row_step) :
start_pos = i
end_pos = i + row_step
print(f'{start_pos} {end_pos}')
text_tmp_ls = df.iloc[start_pos:end_pos]['text'].to_list()
ALL_DATA_tmp = [parse_train_data_sorted(d) for d in nlp.pipe(text_tmp_ls) ]
ALL_DATA = ALL_DATA + ALL_DATA_tmp
print(f'length ALL_DATA : {len(ALL_DATA)}')
现在,Spacy正在遍历文本列表,并使用Matcher查找实体,一次处理列表中20个项目的子集。这是一种避免内存破坏的便捷技术。。
我认为,所有shell pip命令都应该在任何可能依赖于它们的python导入之前运行。