Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
J
jinchat-server
概览
概览
详情
活动
周期分析
版本库
存储库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
aigc-pioneer
jinchat-server
Commits
23a6b26f
Unverified
提交
23a6b26f
authored
5月 05, 2023
作者:
royd
提交者:
GitHub
5月 05, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加语义切分模型 (#248)
上级
41cd0fd8
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
21 行增加
和
8 行删除
+21
-8
chinese_text_splitter.py
textsplitter/chinese_text_splitter.py
+21
-8
没有找到文件。
textsplitter/chinese_text_splitter.py
浏览文件 @
23a6b26f
from
langchain.text_splitter
import
CharacterTextSplitter
import
re
from
typing
import
List
from
modelscope.pipelines
import
pipeline
p
=
pipeline
(
task
=
"document-segmentation"
,
model
=
'damo/nlp_bert_document-segmentation_chinese-base'
,
device
=
"cpu"
)
class
ChineseTextSplitter
(
CharacterTextSplitter
):
def
__init__
(
self
,
pdf
:
bool
=
False
,
**
kwargs
):
super
()
.
__init__
(
**
kwargs
)
self
.
pdf
=
pdf
def
split_text
(
self
,
text
:
str
)
->
List
[
str
]:
def
split_text
(
self
,
text
:
str
,
use_document_segmentation
:
bool
=
False
)
->
List
[
str
]:
# use_document_segmentation参数指定是否用语义切分文档,此处采取的文档语义分割模型为达摩院开源的nlp_bert_document-segmentation_chinese-base,论文见https://arxiv.org/abs/2107.09278
# 如果使用模型进行文档语义切分,那么需要安装modelscope[nlp]:pip install "modelscope[nlp]" -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html
# 考虑到使用了三个模型,可能对于低配置gpu不太友好,因此这里将模型load进cpu计算,有需要的话可以替换device为自己的显卡id
if
self
.
pdf
:
text
=
re
.
sub
(
r"\n{3,}"
,
"
\n
"
,
text
)
text
=
re
.
sub
(
'
\
s'
,
' '
,
text
)
text
=
text
.
replace
(
"
\n\n
"
,
""
)
sent_sep_pattern
=
re
.
compile
(
'([﹒﹔﹖﹗.。!?]["’”」』]{0,2}|(?=["‘“「『]{1,2}|$))'
)
# del :;
sent_list
=
[]
for
ele
in
sent_sep_pattern
.
split
(
text
):
if
sent_sep_pattern
.
match
(
ele
)
and
sent_list
:
sent_list
[
-
1
]
+=
ele
elif
ele
:
sent_list
.
append
(
ele
)
if
use_document_segmentation
:
result
=
p
(
documents
=
text
)
sent_list
=
[
i
for
i
in
result
[
"text"
]
.
split
(
"
\n\t
"
)
if
i
]
else
:
sent_sep_pattern
=
re
.
compile
(
'([﹒﹔﹖﹗.。!?]["’”」』]{0,2}|(?=["‘“「『]{1,2}|$))'
)
# del :;
sent_list
=
[]
for
ele
in
sent_sep_pattern
.
split
(
text
):
if
sent_sep_pattern
.
match
(
ele
)
and
sent_list
:
sent_list
[
-
1
]
+=
ele
elif
ele
:
sent_list
.
append
(
ele
)
return
sent_list
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论