Closed qianma819 closed 8 months ago
🤖
您的问题出在AliTextSplitter
类的split_text
方法中。具体来说,以下几行代码导致了问题:
if self.pdf:
text = re.sub(r"\n{3,}", r"\n", text)
text = re.sub('\s', " ", text)
text = re.sub("\n\n", "", text)
在这些行中,文本被处理的方式是删除了双换行符。第一行将任何连续三个或更多的换行符替换为单个换行符。第二行将所有空白字符(包括换行符)替换为一个空格。第三行删除了所有双换行符的出现。
如果您希望分词器按双换行符分割文本,您应该删除或修改这些行。例如,您可以更改第三行,将双换行符替换为一个唯一的字符串,然后按此字符串分割文本。以下是您可以这样做的方式:
if self.pdf:
text = re.sub(r"\n{3,}", r"\n", text)
text = re.sub('\s', " ", text)
text = re.sub("\n\n", "<DOUBLE_NEWLINE>", text)
sent_list = [i for i in text.split("<DOUBLE_NEWLINE>") if i]
此代码将按双换行符分割文本,只要AliTextSplitter
实例的pdf
属性设置为True
。如果pdf
为False
,则不会以这种方式处理文本。
关于pdf
属性的作用,它在Langchain-Chatchat代码库中的AliTextSplitter
类中用于确定输入文本是否为PDF文档。如果pdf
设置为True
,split_text
方法将对输入文本进行额外的预处理,以删除PDF文档中常见的过多的换行符和空格。这个预处理包括替换三个或更多连续的换行符为一个换行符,替换所有的空白字符为一个空格,以及删除所有连续两个换行符的出现。
这个预处理步骤是必要的,以确保文本处于适合后续文档分割任务的格式。
参考源代码:
This response is meant to be useful and save you time. It is not meant to be a precise solution, but rather a starting point for your own research.
Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.
If you want to continue the conversation, start your reply with @dosu-bot.
TEXT_SPLITTER_NAME = "ChineseRecursiveTextSplitter"这个修改为: TEXT_SPLITTER_NAME = "AliTextSplitter" def init(self, pdf: bool = False, kwargs):修改为: def init(self, pdf: bool = True, kwargs): 怎么ali_text_splitter.py这个文件压根就没运行到,还需要修改什么呢?
1.我准备的文件如图示,打算用\n\n进行分割,段和段直接都用双空行进行了分割。 2.采用ali_text_splitter的分词器,我看里面可以直接双空行分割。代码如下 def split_text(self, text: str) -> List[str]:
use_document_segmentation参数指定是否用语义切分文档,此处采取的文档语义分割模型为达摩院开源的nlp_bert_document-segmentation_chinese-base,论文见https://arxiv.org/abs/2107.09278
3.为了最大程度用双行分割,将单段文本最大长度设置成了1000,重复设置成了0. 结果: 未发现实际按照双空行进行分割,还是按照1000字进行的分割。 这是什么原因呢?如果我就是想要按照双空行进行段落切分,要怎样实际修改呢?