Files
assist/src/utils/__pycache__/helpers.cpython-311.pyc

51 lines
11 KiB
Plaintext
Raw Normal View History

2025-09-06 21:06:18 +08:00
<EFBFBD>
z"5i<35><00><00><><00>ddlZddlZddlZddlmZmZmZmZddlmZm Z ddl
2025-09-06 21:06:18 +08:00
Z
d de de fd<08>Z d ee efd
ee effd <0B>Z d!d e ded
ee fd<0F>Zde de d
efd<12>Zded
e fd<14>Zd
e fd<15>Zde d
efd<17>Zd e d
e fd<18>Zd"d e ded
ee fd<1B>Zdee efdee efd
ee effd<1E>Zd
ee effd<1F>ZdS)#<23>N)<04>Dict<63>List<73>Any<6E>Optional)<02>datetime<6D> timedelta<74>INFO<46>logs/tsp_assistant.log<6F> log_level<65>log_filec<00>2<00>ddl}|<02>|j<00>|<01><00>d<03><04><00>t jt t|<00><00><00><00><00>dt j|d<06><07><00>t j <00><00>g<02><08><00>dS) u设置日志配置rNT)<01>exist_okz4%(asctime)s - %(name)s - %(levelname)s - %(message)szutf-8)<01>encoding)<03>level<65>format<61>handlers)
<EFBFBD>os<6F>makedirs<72>path<74>dirname<6D>logging<6E> basicConfig<69>getattr<74>upper<65> FileHandler<65> StreamHandler)r r rs <20>#D:\code\assist\src\utils\helpers.py<70> setup_loggingrs<><00><00> <0A>I<EFBFBD>I<EFBFBD>I<EFBFBD><07>K<EFBFBD>K<EFBFBD><02><07><0F><0F><08>)<29>)<29>D<EFBFBD>K<EFBFBD>9<>9<>9<> <0B><17><15>g<EFBFBD>y<EFBFBD><EFBFBD><EFBFBD>0<>0<>1<>1<>E<> <13> <1F><08>7<EFBFBD> ;<3B> ;<3B> ;<3B> <13> !<21> #<23> #<23>
2025-09-06 21:06:18 +08:00
<EFBFBD><06><06><06><06><06><06><00>data<74>returnc<00>^<00>g}gd<01>}|D]/}|<00>|<03><00>s|<01>d|<03><00><02><00><00>0d|vr|ddvr|<01>d<05><00>gd<06>}d|vr5|d|vr+|<01>dd <09>|<04><00><00><00><02><00>t|<01><00>d
k|d <0B>S) u验证工单数据)<03>title<6C> description<6F>categoryu缺少必填字段: <20>priority)<04>low<6F>medium<75>high<67>criticalu/优先级必须是: low, medium, high, critical)u 技术问题u 账户问题u 支付问题u 产品问题u 服务问题u 投诉建议u其他r%u类别必须是: z, r)<02>valid<69>errors)<04>get<65>append<6E>join<69>len)r r,<00>required_fields<64>field<6C>valid_categoriess r<00>validate_work_order_datar4s<><00><00> <0F>F<EFBFBD>:<3A>:<3A>:<3A>O<EFBFBD> <20>:<3A>:<3A><05><13>x<EFBFBD>x<EFBFBD><05><EFBFBD><EFBFBD> :<3A> <12>M<EFBFBD>M<EFBFBD>8<><15>8<>8<> 9<> 9<> 9<><39><12>T<EFBFBD><19><19>d<EFBFBD>:<3A>.<2E>6[<5B>[<5B>[<5B><0E> <0A> <0A>G<>H<>H<>H<><06><06><06><14><12>T<EFBFBD><19><19>d<EFBFBD>:<3A>.<2E>6F<36>F<>F<><0E> <0A> <0A>G<>$<24>)<29>)<29>4D<34>*E<>*E<>G<>G<>H<>H<>H<><15>V<EFBFBD><1B><1B><01>!<21><18> <06> <06>r<00>
<00>text<78> max_keywordsc<00><><00>ddl}hd<03>}|<02>|<00><00>}g}|D]B}t|<06><00>dkr-||vr)|<06><00><00>s|<05>|<06><00><00>Ci}|D]}|<07>|d<01><00>dz||<<00>t |<07><00><00>d<05>d<06><07><00>}d<08>|d|<01>D<00><00>S) u提取文本关键词rN><00><><><><><><><><><><><><><><><><><><><><><><><><><>一个<E4B880>没有<E6B2A1>自己<E887AA>c<00><00>|dS)NrU<00>)<01>xs r<00><lambda>z"extract_keywords.<locals>.<lambda>Ks
<00><00>A<EFBFBD>a<EFBFBD>D<EFBFBD>rT)<02>key<65>reversec<00><00>g|]\}}|<01><02>SrWrW)<03>.0<EFBFBD>word<72>counts r<00>
<listcomp>z$extract_keywords.<locals>.<listcomp>Ls<00><00> @<40> @<40> @<40>[<5B>T<EFBFBD>5<EFBFBD>D<EFBFBD> @<40> @<40> @r)<08>jieba<62>cutr0<00>isdigitr.r-<00>sorted<65>items) r6r7ra<00>
stop_words<EFBFBD>words<64>keywordsr^<00>
word_count<EFBFBD> sorted_wordss r<00>extract_keywordsrk2s<><00><00><11>L<EFBFBD>L<EFBFBD>L<EFBFBD><06><06><06>J<EFBFBD>
<12>I<EFBFBD>I<EFBFBD>d<EFBFBD>O<EFBFBD>O<EFBFBD>E<EFBFBD><12>H<EFBFBD><15>"<22>"<22><04> <0E>t<EFBFBD>9<EFBFBD>9<EFBFBD>q<EFBFBD>=<3D>=<3D>T<EFBFBD><1A>3<>3<>D<EFBFBD>L<EFBFBD>L<EFBFBD>N<EFBFBD>N<EFBFBD>3<> <14>O<EFBFBD>O<EFBFBD>D<EFBFBD> !<21> !<21> !<21><><14>J<EFBFBD><18>7<>7<><04>%<25>><3E>><3E>$<24><01>2<>2<>Q<EFBFBD>6<>
<EFBFBD>4<EFBFBD><18><18><1A>*<2A>*<2A>*<2A>,<2C>,<2C>.<2E>.<2E>$<24>O<>O<>O<>L<EFBFBD> @<40> @<40>L<EFBFBD><1D>,<2C><1D>$?<3F> @<40> @<40> @<40>@r<00>text1<74>text2c<00><><00> ddlm}|||<01><00>S#t$r<>}tjd|<03><00><02><00> ddlm}ddlm}|<04><00>}|<06> ||g<02><00>}||dd<06>|dd<07><00><00>dd}t|<08><00>cYd}~S#t$r&} tjd | <09><00><02><00>Yd} ~ Yd}~d
Sd} ~ wwxYwd}~wwxYw) u0计算文本相似度使用语义相似度r)<01>calculate_semantic_similarityu计算语义相似度失败: )<01>TfidfVectorizer)<01>cosine_similarityrU<00>Nu计算TF-IDF相似度失败: g) <0B>src.utils.semantic_similarityro<00> Exceptionr<00>error<6F>sklearn.feature_extraction.textrp<00>sklearn.metrics.pairwiserq<00> fit_transform<72>float)
rlrmro<00>erprq<00>
2025-09-06 21:06:18 +08:00
vectorizer<EFBFBD>vectors<72>
similarity<EFBFBD>e2s
r<00>calculate_similarityrNsG<00><00><17>O<>O<>O<>O<>O<>O<>,<2C>,<2C>U<EFBFBD>E<EFBFBD>:<3A>:<3A>:<3A><> <14> <17> <17> <17><0F> <0A>9<>a<EFBFBD>9<>9<>:<3A>:<3A>:<3A>
<17> G<> G<> G<> G<> G<> G<> B<> B<> B<> B<> B<> B<>(<28><1F>*<2A>*<2A>J<EFBFBD> <20>.<2E>.<2E><05>u<EFBFBD>~<7E>><3E>><3E>G<EFBFBD>*<2A>*<2A>7<EFBFBD>1<EFBFBD>Q<EFBFBD>3<EFBFBD><<3C><17><11>1<EFBFBD><13><1C>F<>F<>q<EFBFBD>I<>!<21>L<>J<EFBFBD><18><1A>$<24>$<24> $<24> $<24> $<24> $<24> $<24> $<24><><18> <17> <17> <17> <13>M<EFBFBD>><3E>"<22>><3E>><3E> ?<3F> ?<3F> ?<3F><16>3<EFBFBD>3<EFBFBD>3<EFBFBD>3<EFBFBD>3<EFBFBD>3<EFBFBD>3<EFBFBD>3<EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD> <17><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <17><><EFBFBD>s><00><00>
C<03>C<03>A#B<02>C<03>
C<05>)C
<05>C<03>
C<05>C<03>C<03>secondsc<00>t<00>|dkr|d<02>d<03>S|dkr |dz }|d<05>d<06>S|dkr |dz }|d<05>d<08>S|dz }|d<05>d <09>S)
u格式化时间持续时间<E697B6><z.0fu秒iz.1fu分钟i<E9929F>Qu小时u天rW)r<><00>minutes<65>hours<72>dayss r<00>format_time_durationr<6E>bs<><00><00><0E><12>|<7C>|<7C><19>"<22>"<22>"<22>"<22>"<22> <10>4<EFBFBD><1E><1E><19>B<EFBFBD>,<2C><07><19>%<25>%<25>%<25>%<25>%<25> <10>5<EFBFBD><1F><1F><17>$<24><0E><05><17>#<23>#<23>#<23>#<23>#<23><16><15><EFBFBD><04><16><1F><1F><1F><1F>rc<00><><00>tj<00><00><00>d<01><00>}tj|<00><00><00><00><00><00><00><00>dd<03>}d|<00>|<01><00>S)u生成工单IDz %Y%m%d%H%M%SN<53><00>WO)r<00>now<6F>strftime<6D>hashlib<69>md5<64>encode<64> hexdigest)<02> timestamp<6D> random_suffixs r<00>generate_order_idr<64>ps^<00><00><18> <0C><0E><0E>'<27>'<27><0E>7<>7<>I<EFBFBD><1B>K<EFBFBD> <09> 0<> 0<> 2<> 2<>3<>3<>=<3D>=<3D>?<3F>?<3F><02><11><02>C<>M<EFBFBD> *<2A> <09> *<2A>=<3D> *<2A> *<2A>*r<00>
2025-09-06 21:06:18 +08:00
date_rangec<00><><00>tj<00><00><00><00><00>}|dkr||fS|dkr|td<03><04><00>z
}||fS|dkr)|t|<01><00><00><00><04><00>z
}||fS|dkr|<01>d<03><07><00>}||fS|dkr|td <09><04><00>z
}||fS|d
kr|td <0B><04><00>z
}||fS |<00>d <0C><00>\}}tj|d <0A><00><00><00><00>}tj|d <0A><00><00><00><00>}||fS#||fcYSxYw)u解析日期范围<E88C83>today<61> yesterdayrU)r<><00>week<65>month)<01>day<61> last_7_days<79><00> last_30_days<79>z to z%Y-%m-%d)rr<><00>dater<00>weekday<61>replace<63>split<69>strptime)r<>r<>r<><00>start<72> start_str<74>end_str<74>ends r<00>parse_date_ranger<65>vs<><00><00> <14>L<EFBFBD>N<EFBFBD>N<EFBFBD> <1F> <1F> !<21> !<21>E<EFBFBD><11>W<EFBFBD><1C><1C><14>e<EFBFBD>|<7C><1B> <13>{<7B> "<22> "<22><19>I<EFBFBD>1<EFBFBD>-<2D>-<2D>-<2D>-<2D> <09><18>)<29>#<23>#<23> <13>v<EFBFBD> <1D> <1D><15> <09>u<EFBFBD>}<7D>}<7D><EFBFBD><EFBFBD>7<>7<>7<>7<><05><14>e<EFBFBD>|<7C><1B> <13>w<EFBFBD> <1E> <1E><15> <0A> <0A>!<21> <0A>$<24>$<24><05><14>e<EFBFBD>|<7C><1B> <13>}<7D> $<24> $<24><15> <09>q<EFBFBD>)<29>)<29>)<29>)<29><05><14>e<EFBFBD>|<7C><1B> <13>~<7E> %<25> %<25><15> <09>r<EFBFBD>*<2A>*<2A>*<2A>*<2A><05><14>e<EFBFBD>|<7C><1B> <20>!+<2B>!1<>!1<>&<26>!9<>!9<> <1E>I<EFBFBD>w<EFBFBD><1C>%<25>i<EFBFBD><1A><<3C><<3C>A<>A<>C<>C<>E<EFBFBD><1A>#<23>G<EFBFBD>Z<EFBFBD>8<>8<>=<3D>=<3D>?<3F>?<3F>C<EFBFBD><18>#<23>:<3A> <1D><> <20><18>%<25><<3C> <1F> <1F> <1F><><EFBFBD>s <00>A)E<00>E c<00><><00>|sdStjdd|<00><00><00><00><00>}tjdd|<00><00>}|S)u清理文本内容<E58685>z\s+<2B> u)[^\u4e00-\u9fa5a-zA-Z0-9\s.,!?;:()])<03>re<72>sub<75>strip)r6s r<00> sanitize_textr<74><00>sG<00><00> <0F><12><11>r<EFBFBD> <0E>6<EFBFBD>&<26>#<23>t<EFBFBD>z<EFBFBD>z<EFBFBD>|<7C>|<7C> ,<2C> ,<2C>D<EFBFBD> <0E>6<EFBFBD>><3E><02>D<EFBFBD> I<> I<>D<EFBFBD> <0F>Kr<00><><00>
max_lengthc<00><><00>t|<00><00>|kr|gSg}d}tjd|<00><00>}|D]s}|<05><00><00>}|s<01>t|<03><00>t|<05><00>z|kr ||dzz }<03>E|r'|<02>|<03><00><00><00><00>|dz}<03>t|r'|<02>|<03><00><00><00><00>|S)u将长文本分割成小块r<E59D97>u[。!?.!?]u。)r0r<>r<>r<>r.)r6r<><00>chunks<6B> current_chunk<6E> sentences<65>sentences r<00>
chunk_textr<EFBFBD><00>s<><00><00>
2025-09-06 21:06:18 +08:00
<EFBFBD>4<EFBFBD>y<EFBFBD>y<EFBFBD>J<EFBFBD><1E><1E><14>v<EFBFBD> <0A> <0F>F<EFBFBD><16>M<EFBFBD><13><08>*<2A>D<EFBFBD>1<>1<>I<EFBFBD><1D>
-<2D>
-<2D><08><1B>><3E>><3E>#<23>#<23><08><17> <15> <14> <0E>}<7D> <1D> <1D><03>H<EFBFBD> <0A> <0A> -<2D><1A> ;<3B> ;<3B> <19>X<EFBFBD><05>-<2D> -<2D>M<EFBFBD>M<EFBFBD><1C> 5<><16> <0A> <0A>m<EFBFBD>1<>1<>3<>3<>4<>4<>4<>$<24>u<EFBFBD>,<2C>M<EFBFBD>M<EFBFBD><14>-<2D><0E> <0A> <0A>m<EFBFBD>)<29>)<29>+<2B>+<2B>,<2C>,<2C>,<2C> <11>Mr<00>dict1<74>dict2c<00><><00>|<00><00><00>}|<01><00><00>D]<5D>\}}||vr<>t||t<00><00>r/t|t<00><00>rt |||<04><00>||<<00>St||t
<00><00>r1t|t
<00><00>r||<00>|<04><00><00><>|||<<00><>|||<<00><>|S)u安全合并两个字典)<07>copyre<00>
isinstance<EFBFBD>dict<63>merge_json_safely<6C>list<73>extend)r<>r<><00>resultrZ<00>values rr<>r<><00>s<><00><00> <12>Z<EFBFBD>Z<EFBFBD>\<5C>\<5C>F<EFBFBD><1B>k<EFBFBD>k<EFBFBD>m<EFBFBD>m<EFBFBD>  <20>  <20>
<EFBFBD><03>U<EFBFBD> <0E>&<26>=<3D>=<3D><19>&<26><13>+<2B>t<EFBFBD>,<2C>,<2C> $<24><1A>E<EFBFBD>4<EFBFBD>1H<31>1H<31> $<24>/<2F><06>s<EFBFBD> <0B>U<EFBFBD>C<>C<><06>s<EFBFBD> <0B> <0B><1B>F<EFBFBD>3<EFBFBD>K<EFBFBD><14>.<2E>.<2E> $<24>:<3A>e<EFBFBD>T<EFBFBD>3J<33>3J<33> $<24><16>s<EFBFBD> <0B>"<22>"<22>5<EFBFBD>)<29>)<29>)<29>)<29>#<23><06>s<EFBFBD> <0B> <0B><1F>F<EFBFBD>3<EFBFBD>K<EFBFBD>K<EFBFBD> <11>Mrc<00><><00>ddl}|<00><00><00>}|<01><00><00>}|jdz dz |jdz dz |<01><00><00>d<04>S)u获取内存使用情况rNi)<03>rss_mb<6D>vms_mb<6D>percent)<06>psutil<69>Process<73> memory_info<66>rss<73>vms<6D>memory_percent)r<><00>processr<73>s r<00>get_memory_usager<65><00>si<00><00><11>M<EFBFBD>M<EFBFBD>M<EFBFBD><14>n<EFBFBD>n<EFBFBD><1E><1E>G<EFBFBD><19>%<25>%<25>'<27>'<27>K<EFBFBD><1E>/<2F>D<EFBFBD>(<28>4<EFBFBD>/<2F><1D>/<2F>D<EFBFBD>(<28>4<EFBFBD>/<2F><1A>)<29>)<29>+<2B>+<2B> <06> <06>r)r r
)r5)r<>)r<00>jsonr<6E><00>typingrrrrrrr<><00>strrr4<00>intrkryrr<>r<><00>tupler<65>r<>r<>r<>r<>rWrr<00><module>r<>sD<00><01><0E><0E><0E><0E> <0B> <0B> <0B> <0B> <09> <09> <09> <09>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28><0E><0E><0E><0E><06><06>S<EFBFBD><06>S<EFBFBD><06><06><06><06> <06>4<EFBFBD><03>S<EFBFBD><08>><3E><06>d<EFBFBD>3<EFBFBD><03>8<EFBFBD>n<EFBFBD><06><06><06><06>4A<01>A<01>3<EFBFBD>A<01>c<EFBFBD>A<01>4<EFBFBD><03>9<EFBFBD>A<01>A<01>A<01>A<01>8<17><03><17>C<EFBFBD><17>E<EFBFBD><17><17><17><17>(  <20>%<25>  <20>C<EFBFBD>  <20>  <20>  <20>  <20>+<2B>3<EFBFBD>+<2B>+<2B>+<2B>+<2B>  <20><13> <20><15> <20> <20> <20> <20>> <10><03> <10><03> <10> <10> <10> <10><12><12>S<EFBFBD><12>c<EFBFBD><12>T<EFBFBD>#<23>Y<EFBFBD><12><12><12><12>8<12>T<EFBFBD>#<23>s<EFBFBD>(<28>^<5E><12>D<EFBFBD><13>c<EFBFBD><18>N<EFBFBD><12>t<EFBFBD>C<EFBFBD>QT<51>H<EFBFBD>~<7E><12><12><12><12>" <06>$<24>s<EFBFBD>E<EFBFBD>z<EFBFBD>*<2A> <06> <06> <06> <06> <06> r