Skip to content

Commit

Permalink
重构txt处理的代码;处理代码风格问题
Browse files Browse the repository at this point in the history
  • Loading branch information
talebook committed Dec 29, 2023
1 parent 728d78b commit 873e34a
Show file tree
Hide file tree
Showing 6 changed files with 323 additions and 104 deletions.
127 changes: 127 additions & 0 deletions tests/cases/book.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@

��������
���ߣ������·�


��飺
����ս��֮ĩ������ǧ��δ��֮���֡�
���������������䡣
�������˹�Ϊ���ӡ�
������ȴ�������ع�С��ڷ������ؼ��е�С���
����Ϊ�����ڹ��֣�Ϊ�����Լ����ˣ�����������������
�������ڣ���������һ����ʱ����
���������ϣ��ĺ�һ��ǧ��Ѫͳ���в��������ھ����������󣬽Ա��������ڽ��¡��ڷ�ֻ��Ц��һ�䣺����࣬�����ֺ���
������ȡ��Խ����ȴ��ū��صǼ���ݣ�¥�����ɡ�����֮�ڣ��ʵ�֮�������������£���ʷ�кθı䣿
������ʼ�ʹ���һ�������½��֡���Ϊ�������ֵ���ξ������Ʋ��������������������


��һ�� Сͤ��


��0001�� ʿ�飬���ʾ����֤��
������������ʮ�꣨��Ԫǰ227�꣩���£��ع��Ͽ���½�أ�����ʱ�֣����������������꣬�����ˮ�������󣬴�ðŽ�������䣬ֻ����Щ�䵽�����ݶ��ϵģ��Ų��ʵر���Ƭ��ס��
��������һ�Ҽ�ª�Ŀ����ڣ��޽Ƿ��׵ġ����ˡ���Ҳ���ǵ����ˣ������ų��ظ�ҥæ��æ�⣬ȴ������ߴ���һ�󹷷ͣ������dz��ص���������
��������ô��������������������һ�䣬�������̵�Ų��ȥ���š�
��������л���ɣ���
���������DZ������˽�����ֻ��������һ��ʪ�����ĺ��£�������竣��ŲȲ�Ь����ľ�������ӣ������ٹ̶���ͷ����࣬һ̧ͷ��ȴ����Ƥ����ڣ���ٷ�����Ũü���ۣ�������룬�Ǹ�ʮ�߰�����������񡭡�
����������һĨ���ϵ���ˮ��¶��һ�ڰ�������������Ҿ���������ɣ�������裬�����ڿ���סһ������
�����������顢������
����һ������Ҫס�꣬����˲���һ����ͨ��������ͷ��þ���������Ŀ��ɨ������������̽���
���������鴫����
������������ͷ�������������ͣ�����ľ���Ƴɵġ��顱���Լ���ľ�����ɵġ�����С��ȡ���������������û����ˮŪʪ��������˿�����˫�ֽ������ˣ�ͬʱ�������Լ�����
���������ǰ�½��������ʿ�飬���ɿ��Խ��Һڷ򣡡�
�������ڷ򣿡�
�����������������в������ˣ�Ψ��û��������������Ŀ���ڡ��顱�ͺڷ����������ǻ��������澢���úڷ�����ǰ�������������֤�Ĵ�����һʱ���亹ֱð����
�����ɲ��úڷ����飬��Ϊ�������ݿ���˵����ģ�Ҳ����˵�Ǽٵģ�
����ԭ��������Ͳ���ԭװ���ع��ˡ��ڷ��ˣ����Ƕ�ʮһ����ijʡ����ѧԺ��ѧ������ҵ������������ɳ������ƣ������ѵ�����������ף��ȴΪ�˾�һλ��ˮ��С�к�����������
����������ʱ���������Լ�����Ӳ������ϣ���һȺ���Ź��ӵġ�İ���ˡ���Χ���꺮��ů��
����������֪������������ĸ�ס���硢�ܵܵȡ��Լ������������С˵����Ϊ����Խ���������ŶΣ����һ�һ�����ص�����ǧ����ǰ���������С��ڷ򡱵��ع���½�����꣡
�������ڷ��ⲻ�����Ƿ⡮�й�����ļ��顯����ع�ʿ��ô����
����������һЩ��Ŀ���������ؼ�����ԡ��ڷ�ľ빡�ӡ����̣�ȴû�ϵ����Լ������Ƿ��ŵ����ˡ���
�����뵽�Լ���δ�������㲻�����������ӽ�Ŀ��˵���ڷ����ھ�Ӫ��д���š������ֵܶ���ֻ���ؾ���ͨС�䣬����Ҫִ����ս���񣬻�ȱ����ʳ������д�������ҪǮ���·���˵�ٲ���Ǯ����Ҫ������������������
�����ڷ������Ҫ���·���Ǯ�ĵ�û�У��������ö�֪������һ���ǿ���ѧ�ҿ϶��ģ��ڷ�������У�Ĺ��ֻ������Ŷ�û�кڷ���Źǣ�Ҳ����˵���ڷ�ܿ��������������ս���У�ֻ����������ţ���������Ϊһ���������Ĺ�����
�������һ�ս��ɳ����ʬ���޴棿��
�����ڷ�ʼ�ʾ���֭����β��ܱ����պ�ս�������ˣ������������üĿ�������ش峤����������ͻȻ��������������Ҫ������
����ԭ�����ڷ��������17�꣬�����ع����ɷ�������Ϊһ���������ӣ�Ӧ�á���������Ҳ���ǵǼǻ������֣����е����۵�����
�������ºڷ��ɵ���ۣ���Ϊ�Լ�Ҫ����׳����ս���ˣ���Ȼǰ���ھ���ѧԺ�ܹ�һЩѵ����ʵϰʱҲ����Ѫ�������������һ���£���ǧ������ɱ��ս������һ���¡�
�������Ĵ�硰�ԡ��������ĵ��Ǻ������Ц������˺ڷ�����ǡ�
�����ع����ⷽ�滹�ǿ��Ǻ���ȫ�ģ���Ϊ������һ�η��ۣ��ڷ�ֻ�赽��½�سǵ�һ���µġ����䡱���﹫���޳�վ�ڣ����ǽ��ܾ���ѵ����������ս���ģ��ڷ�������˿�����
������½�ظ��伯�ϵ����������ʮ�³�һ������Ѿ����µף�������𣬺ڷ�ֻ�ôҴ���ʰ��������·��
��������������ʱ��ĸ�׺ͳ����Զ���ǧ����������������ǰ������ɥĸ��ͯ���Ƨ�ĺڷ�е���һ˿�ҵ���ů����ʼ������ͬ������ݡ���
��������ʱ���ڷ�����Ҳ̤ʵ�����࣬���룺������֮��֮�������������dz������������Ĵ�ս���磬����Ҳû�ã�����࿴�������ú��˽����ʱ���������뱣��֮�ߡ���
�������ǣ��ڷ�㽫���������Ժ󣬿�ʼ����ش��������ʷ���Ϊ�����ء��Ĺ��ȡ�
����������֪����һ����һ������һ·�ϣ��ع��ƶ�֮�걸���ɷ�֮���������úڷ���һ������Ϊ�Լ��ߴ���Ƭ�����⻹�ǹŴ�ô��
�����ͱ���˵����ǰ��Ͷ����ҿ��ᣬ������Ҫ�ġ��顱��������
�������顱�����ع��˵�����֤���ɰ��ƿ�����ľ���Ƴɣ�����׭���кڷ�ļ������ݣ����Ͽ�����½�ء������硢Ϧ�����ˣ����ڷ򣬼��еڶ��ӣ���ʿ�飬���߳���硣��
����ʿ�飬���ع���û�о�λ��ƽͷ�ϰ��յijƺ������⣬�ع����ձ��ڶ��ӣ��廧һ�飬ʮ��һʲ��ƽ�յúú��ֵأ������������硣�������Զ�ţ�����Ҫ��˵�ù�ȥ�����ɣ������ɼ�������ڵĴ峤�����������ɳ�������ͤ��������д��֤��������ǡ��������൱���ع��˵Ľ����š�
�������ִ�һ�������ع�����������֤�ͽ����Ų���ס�꿪���������������������ˣ��ͻᱻ��������������룡
�����������˲ŶԺڷ���ϸ���ʣ�ϸ�µ��������м����ˣ����Ǹ�ʲô�Ķ�Ҫȷ�ϣ�������������Ϧ����ļ�λ���˼����֣�����ɻ��ã���ȷ����������α��
�����ڷ�����׼����һһ�����鴫Ҳû���⣬������ŷŹ�����˵������ԭ����ȥ������۵�ʿ�飬���ҽ����ɡ���
����������
�����ڷ�Ӧŵ������һ�Ŵ�ʯͷ��ذ������ҵ��������ã���û���ص������ĸ��ޡ���
�����ڷ�Խǰ����˵������£���Т�����󣬱��·���������Ĺ�����������������������ѳ���ȫ��ͨ���������ӵ�һ���ù���ҪͶ�ޣ�ȴ��Ϊ�޷��ṩ�鴫������������֮���⡣
�����������Լ�һ�ִ������ƶȱ��Ͼ�·������Ī��ķ��̡���������Ҳ�ã��ڿ�����ס�ģ���̫�������ӷ���ͽ����Ҷ����ع����񣬿��԰���˯���ˡ�
�������᲻�󣬾��Ǹ�������Ժ�䣬����Ժ��ʱ���ڷ򿴵�����ͣ��һ�������������ijλס������ġ�
�������������������������ǽ������һ����ݣ����ڽ���ǰ��������ͻȻ��ͷ������֪���ڿ���˽��������ô����
�����ڷ�æ������֪�����Ҿ��������¡���
�����ع�������ս���Ͻ�˽���������˶��ֵ��˻ᱻ���ͷ�����룬��Ϊ��ͽ��
���������׾ͺá������˻����úڷ������������������ų������򿪴��ݵ��ţ�һ��ů���ʱ�����������
������������������ˣ���Χ�ŵ���𣬼��������ִ���һλ���ˣ�����Լ��˼�������һ���ݺ����������������к�������С�ֵܣ�����������
����������Եȣ���ȥ׼����������
������������ʹ��ˣ���ʲô���������̵ģ�����ֻ�������Ա�ṩ��ʳ��������ͨ���գ����Լ�����ĸ��������ˣ�����Ѹ�����һ�������ȣ����������御��
�����ڷ����˸�����������������£�һ�߿����·���һ�ߴ���ͬһ�����µļ��ˡ����ǵĴ��ͺڷ��࣬����һ�����£�ʪ�����ġ��������������ű��͵��ˣ��������ף�ֻһ����������˱������������ӽ��յ��������ĵ������ճɡ���
�����ڷ��������ţ�ʱ��ʱӦ�ͼ������������࣬ȴ��ϲ�������˽�̸���������������еظ������ʱ�����˺��£�ͬʱ��ȡ���õ���Ϣ��
�����������ţ���������ƫת�����ճ�����ת����������ġ����´��¡��ϡ�
��������ȿ����������ˣ���
���������к��ڷ������߾������ݺ����꣬���С���Ӥ��������Ȼѹ�����������Ժڷ���˵���
��������������������˵���ϸ��£��и�����̿ͣ������������������д̴�������


��0002�� ����������ǰ��
�����������˼����թ�������׵�ͼΪ�����������У�����ɱ����������
�������棡��
�����Աߵ��˶�������һ����������ϸ������Ӥ�����⾪�Ķ��ǵĹ��¡�ֱ����˵����û�£�������˿������׷��������Ǵ̿ͺ��������ͬʱ���ҵ���
����������������ӻ������������¡���
�������ó������������ڣ�������������ͨ������Ŀ�У�����ͬ����ȸߵĴ��ڣ����ܾ�����
����ֻ�кڷ�Ծ���������ϧ���漴�����˳�˼��
�������Ӵ���Դ���˵�ˣ�����ǰ����Ԫǰ230�꣩�����������ڵ��Ͽ�̫���ڹ���һ��ǰ����Ԫǰ228�꣩���Զ�����Ҳ���ؾ�ռ�죬�Ի��μ����dz�ս�ۡ�
������񣬾��������Ҳ�ѷ����������ζ�ţ�����ܿ��Ҫ�군�ˣ�
������Ϊһ����ʷ�����ߣ��ڷ�֪���������ľ籾����Ϊ���������������ɴ�����࣬���꣬�඼�ƣ�̫�ӵ���ɱ�������˱��ɶ���
�������ͬʱ���ؾ������͹������ǣ�κ��Ҳ�ܿ��������
�������һ�����ع��Ѿ���ɨ���������������Ľ�������ָ���Ϸ��ij�����
������Ҳ����˵���ٹ����꣬�س�ս�����ȫ�汬������
�����ڷ�������ָһ�㣬���а��������Щ����ңԶ�����´��£�ȴ����ϢϢ��أ������ؾ���һ�δ�ʤ���������ĽŲ�Ҳ�������ƽ��Լ���
�����������ս�������˺ü��꣬�����ʱ���ع������嶯������ʮ���ˡ����Ͽ�������ٽ����������صأ��ڷ���Ϊ����ʿ�飬�϶��޷����⡣
������ʱ��������ݵ����������ô�죿
�������ߣ���
���������ͷֻ��һ�����������Ͼͱ��ڷ����ˡ�
�������У��ع���������۵ġ����ˡ�ʮ���Ͽᣬһ�����û񣬷ǵ�����Ҫ����Ϊū�������ˡ��ھӶ���ǣ���ܷ���һ�����ܣ�ȫ�����갡��
�������������������ӵ��ģ���Ȼ��½�ؾ��������Զ��ֻҪС�ĵ㣬�ܿ���������ȥ�������£����ع�ͳһ�Ǵ�����������������ֻ���Ⱥ����⡣
���������뿪��ԭҲû�ã���������ʼ�ʻ���������֪��������е������Ǿ仰��ô˵���ţ�������֮�ڣ��ʵ�֮����������ɳ���Ͼ����������ж������������ġ��˼��������޲����ߡ�������ڷ��ӵ����ĺ��ǣ����ջ��ǻ������ص�ͳ�Ρ�
������˵�ˣ���Ȼ�ع��İ���Ҫ���ɳ��صĸ�˰��ҪӦ���ܼ������۱��ۣ��DZȸ��ĵ���ԭ���˵㣬��������Ҳû������˸�ԣ��������Ҫ��һ���ǣ�����ô����²������ṩ��һ����ƽ�����������������Ǿ��Ǿ������ƶȣ�
������ֹͶ̥����ѧ�ʣ���ԽҲ�ǣ���ЩС˵��һ���۾ͳ�Ϊ�������ӡ���������ģ�������ɷ�ڷ�Ҳ������Ҳ�и��ó�������Ȼ���ʺ���������������������Ϊ����Ϊ������Ϊһ��û�б�����ȴ������������񣬻��������ع�����Щ��
������������ڷ���ʲô������˭��˵�����̰��������ٸ����ݹ�����ȥ��飡��
������ʱ�����˲������̵������������������Ծ��档
���������������ң������໥ʹ����ɫ��ͣס��ͷ�������ӹ�������
�����Ǹ�����ļ�Ӥ�պ���һ�ڣ��㱧Թ���������ɣ����������Ȱ����Dz���û�տ�����
���������˵�����һ�ۣ��������ȣ����ȥ����ˮ����
������Ӥ���ֹͣ�˱�Թ��ֻ�������˱���С����졣
�����ڷ������Ц���������Ȼ���󣬵����ɵõ����ô������ڱ����Ƶ����á����������²��ò���ͷ��˭Ҳ���Ҵ�ŭ�����ˣ����ϵ��������꣬������Ⱥ����Ҫô���޾���ʿ�飬Ҫô�ǵͼ��Ĺ�ʿ����ȷû�����˸߿�һ�ۡ�
���������Ӧ����ڷ���˺��������ֽ��˳�������һ�����ʱ���������һ��������Ů��������ɫ���£�˫�ֶ�������ʳ�У��ಽ�����ظ�������������Ӧ������Ů����
������Ů��̸����Ư��������������������¯��ʿ���ǵ�ע�⣬�������ѵļ�Ӥ�������ڣ��վ�û�ң�ֻ�������������������ϵľ�ϸ��ʳ�������¿�ˮ�ʵ��������ɣ����Ƿ�ʳ�Ǹ�˭��ȥ�ģ���
����������Ȼû�����������ǣ���Ц��������������λ�����ȥ�ģ����������ԣ��ȰѾ�λ����ȥ��˵����
����������ع���ʮ�Ⱦ��ĵ�5�����Ѿ����еȾ�λ�ˡ�
������Ӥֻ���ֶ���������������ŮŤ������֫�������ú�ֱ������ʧ����Ұ�⣬�ŷ߷߲�ƽ��˵�������Ҽ������в����о��װ׷���������ˮ��������ʳ�����˻�����Ů������ȥ�ͣ�Ī����������λ�������Ϊ檣����ϲ��ߣ�Ҳ�����ó���������
�������Ͼ��Ǵ�򣬴��������ʿ����Ȼ��ͬ����
�����ڷ�Ҳ���ɷ����˸п���������Ӥһ��������ף�����ĬĬ���£���������ȡ��ĸ��Ϊ��׼����ʳ����f����h��u�������ǰ����õķ���ɹ�ɸ�������Ȼ������ӣ���ζ��ʵ�ڲ��ҹ�ά��
������ֻ�����Ÿ��ڴ������㡢���������ʸɷ����������ߵģ����������˱Ϲ��Ͼ����ֺû���Աȸղŵ�̬�ȣ��������ر�
����������úڷ���������ˣ��ع����Ǹ��ȼ������Ľ׼���ᣬ������ȫ�ɾ�λ������
���������ԵIJ�һ����ס�ĵط�Ҳ��һ������ڷ�������Щ��·��С�ϰ��գ�ֻ���ڵ����ϼ���˯���������¾�λ�ߣ��൱��С��Ա������˯��ͨ�̡�����ڵĴ���൱�ں������ؾִ����ɲ�������ר�ŵ�һ������ЪϢ��Ҳ���������˵�Ů����ϴ�����㡭��
���������˸��˵IJ�డ��
�����Ⱥڷ�����������극��ҹ�Ѿ������ˡ����������˸�������ĵ�¯�Ӳ񣬻�ܿ�Ϩ����ΧԽ��Խ�䣬ʿ����ֻ�ܼ���һ����ȡů��
�������������ϰ�������ִ�����Ѹ�ٳ���˯���У������������𣬵��ڷ�ȴ˯���ţ�������˼��δ���Ĵ��㡣
�������˷������ŵȣ��Թ���Ȼ����
�����ڰ��У�������Щ�쾭�����£��ڷ������ȭͷ�������¾��ĵ����������������ˣ��������ع����Ϻ����ӣ����������ֵ����ˣ�����Ψһ�İ취�����ǻ�þ�λ����
��������
����PS����Ȼ���ǰ٣��ֽ�������ʷ����ר���ﶼ����ʼ�ʽС���������С˵��Ҳ���ؿ����ˣ�һ����˳�����ȡ�

62 changes: 62 additions & 0 deletions tests/test_txt.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

from tests.test_main import TestWithUserLogin, setUpModule as init, testdir
from webserver.plugins.parser.txt import TxtParser, get_file_encoding


def setUpModule():
init()


class TestTxtParse(TestWithUserLogin):
BOOK_PATH = testdir + "/cases/book.txt"
BOOK_ENCODING = "GB18030"
BOOK_TOC = [
{
"id": 1,
"title": "《秦吏》",
"start": 12,
"end": 32
},
{
"id": 2,
"title": "简介:",
"start": 40,
"end": 544
},
{
"id": 3,
"title": "第一卷 小亭长",
"start": 559,
"end": 563
},
{
"id": 4,
"title": "第0001章 士伍,请出示身份证!",
"start": 594,
"end": 6565
},
{
"id": 5,
"title": "第0002章 天下事与眼前事",
"start": 6590,
"end": -1
}
]

def xtest_get_file_encoding(self):
encoding = get_file_encoding(self.BOOK_PATH)
self.assertEqual(encoding, self.BOOK_ENCODING)

def test_parse_text_book_table_of_content(self):
with open(self.BOOK_PATH, encoding=self.BOOK_ENCODING) as fileobj:
toc = TxtParser().parse_txt_book_toc(fileobj)
self.assertEqual(len(toc), len(self.BOOK_TOC))
self.assertEqual(toc, self.BOOK_TOC)

def xtest_parse(self):
toc = TxtParser().parse(self.BOOK_PATH)
self.assertEqual(len(toc), len(self.BOOK_TOC))
self.assertEqual(toc, self.BOOK_TOC)

107 changes: 4 additions & 103 deletions webserver/handlers/book.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
from webserver.handlers.base import BaseHandler, ListHandler, auth, js
from webserver.models import Item
from webserver.plugins.meta import baike, douban
from webserver.plugins.parser.txt import TxtParser, get_content_encoding

CONF = loader.get_settings()
_q = queue.Queue()
Expand Down Expand Up @@ -599,62 +600,6 @@ def get(self):
class BookTxtInit(BaseHandler):
__que = []
__current_book_id = -1
# 目录解析规则
TXT_CONTENT_RULES = [
{
"name": "目录(去空白)",
"example": "第一章 假装第一章前面有空白但我不要",
"rule": r"(?<=[ \s])(?:序章|楔子|正文(?!完|结)|终章|后记|尾声|番外|第\s{0,4}[\d〇零一二两三四五六七八九十百千万壹贰叁肆伍陆柒捌玖拾佰仟]+?\s{0,4}(?:章|节(?!课)|卷|集(?![合和]))).{0,30}$"}, # noqa
{
"name": "目录",
"example": "第一章 标准的粤语就是这样",
"rule": r"^[  \t]{0,4}(?:序章|楔子|正文(?!完|结)|终章|后记|尾声|番外|第\s{0,4}[\d〇零一二两三四五六七八九十百千万壹贰叁肆伍陆柒捌玖拾佰仟]+?\s{0,4}(?:章|节(?!课)|卷|集(?![合和])|部(?![分赛游])|篇(?!张))).{0,30}$"}, # noqa
{
"name": "数字 分隔符 标题名称",
"example": "1、这个就是标题",
"rule": r"^[  \t]{0,4}\d{1,5}[::,., 、_—\-].{1,30}$"},
{
"name": "大写数字 分隔符 标题名称",
"example": "一、只有前面的数字有差别\n二十四章 我瞎编的标题",
"rule": r"^[  \t]{0,4}(?:序章|楔子|正文(?!完|结)|终章|后记|尾声|番外|[零一二两三四五六七八九十百千万壹贰叁肆伍陆柒捌玖拾佰仟]{1,8}章?)[ 、_—\-].{1,30}$"},
{
"name": "正文 标题/序号",
"example": "正文 我奶常山赵子龙",
"rule": r"^[  \t]{0,4}正文[  ]{1,4}.{0,20}$"},
{
"name": "Chapter/Section/Part/Episode 序号 标题",
"example": "Chapter 1 MyGrandmaIsNB",
"rule": r"^[  \t]{0,4}(?:[Cc]hapter|[Ss]ection|[Pp]art|PART|[Nn][oO][.、]|[Ee]pisode|(?:内容|文章)?简介|文案|前言|序章|楔子|正文(?!完|结)|终章|后记|尾声|番外)\s{0,4}\d{1,4}.{0,30}$"}, # noqa
{
"name": "特殊符号 序号 标题",
"example": "【第一章 后面的符号可以没有",
"rule": r"(?<=[\s ])[【〔〖「『〈[\[](?:第|[Cc]hapter)[\d零一二两三四五六七八九十百千万壹贰叁肆伍陆柒捌玖拾佰仟]{1,10}[章节].{0,20}$"},
{
"name": "特殊符号 标题(成对)",
"example": "『加个直角引号更专业』\n(11)我奶常山赵子聋",
"rule": r"(?<=[\s ]{0,4})(?:[\[〈「『〖〔《(【\(].{1,30}[\)】)》〕〗』」〉\]]?|(?:内容|文章)?简介|文案|前言|序章|楔子|正文(?!完|结)|终章|后记|尾声|番外)[  ]{0,4}$"}, # noqa
{
"name": "特殊符号 标题(单个)",
"example": "☆、晋江作者最喜欢的格式",
"rule": r"(?<=[\s ]{0,4})(?:[☆★✦✧].{1,30}|(?:内容|文章)?简介|文案|前言|序章|楔子|正文(?!完|结)|终章|后记|尾声|番外)[  ]{0,4}$"},
{
"name": "章/卷 序号 标题",
"example": "卷五 开源盛世",
"rule": r"^[ \t ]{0,4}(?:(?:内容|文章)?简介|文案|前言|序章|楔子|正文(?!完|结)|终章|后记|尾声|番外|[卷章][\d零一二两三四五六七八九十百千万壹贰叁肆伍陆柒捌玖拾佰仟]{1,8})[  ]{0,4}.{0,30}$"}, # noqa
{
"name": "书名 括号 序号",
"example": "标题后面数字有括号(12)",
"rule": r"^.{1,20}[((][\d〇零一二两三四五六七八九十百千万壹贰叁肆伍陆柒捌玖拾佰仟]{1,8}[))][  \\t]{0,4}$"},
{
"name": "书名 序号",
"example": "标题后面数字没有括号124",
"rule": r"^.{1,20}[\d〇零一二两三四五六七八九十百千万壹贰叁肆伍陆柒捌玖拾佰仟]{1,8}[  \\t]{0,4}$"},
{
"name": "字数分割 分节阅读",
"example": "分节|分页|分段阅读\n第一页",
"rule": r"(?<=[  \t]{0,4})(?:.{0,15}分[页节章段]阅读[-_ ]|第\s{0,4}[\d零一二两三四五六七八九十百千万]{1,6}\s{0,4}[页节]).{0,30}$"
}
]

@js
def get(self):
Expand Down Expand Up @@ -741,43 +686,11 @@ def parse_txt_content(self):
# 移除临时文件
os.remove(tPath)
return
encode = get_file_encoding(fpath)
logging.info("encoding " + encode)
res = []
i = 1
with open(fpath, 'r', encoding=encode, errors='ignore') as file:
pre_chapter = None
pre_seek = -1
# 读取一行
line = file.readline()
while line:
# 获取当前文件指针的位置(seek位置)
seek_position = file.tell()
for rule in self.TXT_CONTENT_RULES:
try:
matches = re.findall(rule['rule'], line)
if len(matches) == 0:
continue
if pre_chapter is not None:
pre_chapter["end"] = pre_seek
pre_chapter = {
"id": i,
"title": matches[0],
"start": seek_position,
"end": -1
}
res.append(pre_chapter)
logging.info(f"当前任务:{bid}")
i += 1
time.sleep(0.05)
break
except Exception:
continue
pre_seek = seek_position
line = file.readline()

res = TxtParser().parse(fpath)
if len(res) == 0:
res = [{
"id": i,
"id": 1,
"title": "全部",
"start": 0,
"end": -1
Expand Down Expand Up @@ -915,18 +828,6 @@ def do_send_mail(self, book, mail_to, fmt, fpath):
return


def get_file_encoding(file):
import chardet
with open(file, 'rb') as f:
tmp = chardet.detect(f.read(100))
return tmp['encoding']


def get_content_encoding(byte):
import chardet
return chardet.detect(byte)['encoding']


def routes():
return [
(r"/api/index", Index),
Expand Down
Loading

0 comments on commit 873e34a

Please sign in to comment.