spacy-streamlit: Streamlit应用的spaCy构建模块
该工具包包含用于可视化spaCy模型并通过Streamlit构建交互式spaCy驱动应用的实用程序。它包含多个可在自定义Streamlit应用中使用的构建模块,如句法依赖关系可视化器、命名实体、文本分类、通过词向量的语义相似性、词符属性等。
🚀 快速开始
可通过pip安装spacy-streamlit:
1
|
pip install spacy-streamlit
|
该工具包包含调用Streamlit并设置所有必需元素的构建模块。您可以直接在应用中使用单个组件并与其他元素组合,或调用可视化函数嵌入整个可视化器。
从spaCy下载英文模型开始使用:
1
|
python -m spacy download en_core_web_sm
|
然后将以下示例代码放入文件中:
1
2
3
4
5
6
|
# streamlit_app.py
import spacy_streamlit
models = ["en_core_web_sm", "en_core_web_md"]
default_text = "Sundar Pichai is the CEO of Google."
spacy_streamlit.visualize(models, default_text)
|
随后可通过streamlit run streamlit_app.py
运行应用。
📦 示例:01_out-of-the-box.py
使用嵌入式可视化器及自定义设置:
1
|
streamlit run https://raw.githubusercontent.com/explosion/spacy-streamlit/master/examples/01_out-of-the-box.py
|
👑 示例:02_custom.py
在现有应用中使用独立组件:
1
|
streamlit run https://raw.githubusercontent.com/explosion/spacy-streamlit/master/examples/02_custom.py
|
🎛 API
可视化器组件
这些函数可在Streamlit应用中使用,它们在底层调用streamlit并设置所需元素。
函数 visualize
嵌入包含选定组件的完整可视化器。
1
2
3
4
5
6
|
import spacy_streamlit
models = ["en_core_web_sm", "/path/to/model"]
default_text = "Sundar Pichai is the CEO of Google."
visualizers = ["ner", "textcat"]
spacy_streamlit.visualize(models, default_text, visualizers)
|
参数 |
类型 |
描述 |
models |
List[str] / Dict[str, str] |
可加载的spaCy模型名称(路径或包名) |
default_text |
str |
加载时分析的默认文本 |
default_model |
Optional[str] |
可选默认模型名称 |
visualizers |
List[str] |
要显示的可视化器名称 |
ner_labels |
Optional[List[str]] |
要包含的NER标签 |
ner_attrs |
List[str] |
命名实体表中显示的跨度属性 |
token_attrs |
List[str] |
词符可视化器中显示的词符属性 |
similarity_texts |
Tuple[str, str] |
相似性可视化器中的默认比较文本 |
show_json_doc |
bool |
显示切换Doc的JSON表示的按钮 |
show_meta |
bool |
显示切换当前管道meta.json的按钮 |
show_config |
bool |
显示切换当前管道config.cfg的按钮 |
show_visualizer_select |
bool |
显示侧边栏下拉菜单以选择要显示的可视化器 |
sidebar_title |
Optional[str] |
侧边栏中显示的标题 |
sidebar_description |
Optional[str] |
侧边栏中显示的描述(支持Markdown格式) |
show_logo |
bool |
在侧边栏中显示spaCy徽标 |
color |
Optional[str] |
实验性:用于部分主要UI元素的主颜色 |
get_default_text |
Callable[[Language], str] |
可选可调用对象,接收当前加载的nlp对象并返回默认文本 |
函数 visualize_parser
使用spaCy的displacy可视化器可视化依赖解析和词性标签。
1
2
3
4
5
6
|
import spacy
from spacy_streamlit import visualize_parser
nlp = spacy.load("en_core_web_sm")
doc = nlp("This is a text")
visualize_parser(doc)
|
函数 visualize_ner
使用spaCy的displacy可视化器可视化Doc中的命名实体。
1
2
3
4
5
6
|
import spacy
from spacy_streamlit import visualize_ner
nlp = spacy.load("en_core_web_sm")
doc = nlp("Sundar Pichai is the CEO of Google.")
visualize_ner(doc, labels=nlp.get_pipe("ner").labels)
|
函数 visualize_spans
使用spaCy的displacy可视化器可视化Doc中的跨度。
1
2
3
4
5
6
7
8
9
|
import spacy
from spacy_streamlit import visualize_spans
nlp = spacy.load("en_core_web_sm")
doc = nlp("Sundar Pichai is the CEO of Google.")
span = doc[4:7] # CEO of Google
span.label_ = "CEO"
doc.spans["job_role"] = [span]
visualize_spans(doc, spans_key="job_role", displacy_options={"colors": {"CEO": "#09a3d5"}})
|
函数 visualize_textcat
可视化训练文本分类器预测的文本类别。
1
2
3
4
5
6
|
import spacy
from spacy_streamlit import visualize_textcat
nlp = spacy.load("./my_textcat_model")
doc = nlp("This is a text about a topic")
visualize_textcat(doc)
|
函数 visualize_similarity
使用模型的词向量可视化语义相似性。如果模型中不存在向量将显示警告。
1
2
3
4
5
|
import spacy
from spacy_streamlit import visualize_similarity
nlp = spacy.load("en_core_web_lg")
visualize_similarity(nlp, ("pizza", "fries"))
|
函数 visualize_tokens
可视化Doc中的词符及其属性。
1
2
3
4
5
6
|
import spacy
from spacy_streamlit import visualize_tokens
nlp = spacy.load("en_core_web_sm")
doc = nlp("This is a text")
visualize_tokens(doc, attrs=["text", "pos_", "dep_", "ent_type_"])
|
缓存辅助函数
这些辅助函数尝试缓存加载的模型和创建的Doc对象。
函数 process_text
使用给定名称的模型处理文本并创建Doc对象。调用load_model辅助函数加载模型。
1
2
3
4
5
6
|
import streamlit as st
from spacy_streamlit import process_text
spacy_model = st.sidebar.selectbox("Model name", ["en_core_web_sm", "en_core_web_md"])
text = st.text_area("Text to analyze", "This is a text")
doc = process_text(spacy_model, text)
|
函数 load_model
从路径或已安装包加载spaCy模型并返回加载的nlp对象。
1
2
3
4
5
|
import streamlit as st
from spacy_streamlit import load_model
spacy_model = st.sidebar.selectbox("Model name", ["en_core_web_sm", "en_core_web_md"])
nlp = load_model(spacy_model)
|