
    =0fc                     6   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z
d Zd Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd'dZd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d  Z)d! Z*d" Z+d# Z,d$ Z-d% Z.d(d&Z/y))    Nc                     t        j                         }| d   |   }|dk7  r|}n#| d   |   | d   |   z   | d   |   z   | d   |   z   }|j                  d      }|j                  |       |j	                         }|S )NV_GTIN V_Name	V_CommentV_Trademarkzutf-8)hashlibmd5encodeupdate	hexdigest)dfidxmgtinsnbskeys          EE:\wamp\www\apps\calme\nutritwin\resources\KCADBProcessorUtilities.py
computeKeyr      s    Ah<Drz\#Hc!22R_S5IIB}L]^aLbb
		'AHHQK;;=DK    c                     | d k(  ry | j                  dd      }t        j                  dd|      }t        j                  dd|      }|j                  dd      }|S )Nz&quot;'z[\n\r]*r   u   [®]*\)replaceresub)iStrns     r   removeExoticMarkersr       sU    t|Xc"A
z2q!A
xQA			$AHr   c                    d}	 | d   }| d   }| d   }| d   }|dk7  r?||z   |z   |z   }t        j                  |j                               }|j                         }nt	        j
                  d       |dz   |z   }|| d<   y #  t	        j
                  d       t        d	       t        d
       t        |        t        d	       Y SxY w)NXXXX
V_NormNameV_NormCommentV_NormTrademarkr   r   zEmpty name, no possible IDzWrong norm name/commentzK---------------------------------------------------------------------------z	ERROR in:#V_ID)r	   r
   r   r   	KCATraces	TRACE_ERRprint)	dataRow
codeOriginextnamecomment	trademarkr   r   txts	            r   setRowIDr2   &   s    
C]|$/*-.	x 2:.9,t3CCJJL)A++-C  <= s
S
 CGFO
]56[\kg[\s   A-A? ?ACc                    t        |       }|j                  d      }d}|D ]  }|j                         }|dk(  rd}n|dk(  rd}n|dk(  rd}nw|d	k(  rd
}no|dk(  sZ|dk(  sU|dk(  sP|dk(  sK|dk(  sF|dk(  sA|dk(  s<|dk(  s7|dk(  s2|dk(  s-|dk(  s(|dk(  s#|dk(  s|dk(  s|dk(  s|dk(  s|dk(  s
|dk(  s|dk(  r|j                         }||z   dz   } |d d }|dd  dk(  r|d d }t	        |      }|S )N r   BioBIOUhtUHTzC'EstzC'estAbcABCDe   ÀD'AuAuxLeLesEPourL'LaEnDuAlEtAvec)r    splittitlelowersetCamelCaseFormat)r   r   sploStrws        r   
formatNamerS   H   s/   D!A
''#,CD GGI:A%ZA'\A%ZA$Y!t)qDyAIeqTXy\]af\f3h!v+da4i194i19T	Q$Y!t)4iAK	Aax#~  9DBCyCCRyd#DKr   c                    | dk(  ryd}| j                  d      }g d}|D ]  }||v r|dk7  r|dz  }||z  }|j                  d      dk\  s|j                  d      dk\  rt        j                  d|z          d}|j	                         }|dk(  rd	}nW|d
k(  rd}nO|dk(  rd}nG|dk(  rd}n?|dk(  rd}n7|dk(  rd}n/|dk(  rd}n'|dk(  rd}n|dk(  rd}n|dk(  rd}n|dk(  rd}n|dk(  rd}|dk7  s|dk7  r|dz  }||z  } |S ) Nr   ,)zen:noneen:milken:soybeans en:sulphur-dioxide-and-sulphitesen:nuts
en:peanutszen:lupinz	en:glutenen:eggs
en:mustard	en:celeryzen:molluscsen:crustaceansen:fishen:sesame-seedsen:oaten:r   fr:zWrong allergen: laitrV   sojarW   u   fruits à coquesrY   oeufr[   avoinera   	arachidesrZ   sulfitesrX   moutarder\   u   célerir]   poissonr_   u
   crustacésr^   u   sésamer`   )rL   findr(   r)   rN   )starsrcaaalistalcas         r   formatAllergensrs   h   s_   
byD	3B5E  (:rzAID vve}!QVVE]a%7##$6$:; B'')Cf}"**#!
"7
"!	! 	!$%	!&Rx2:CKD
Q(T Kr   c                     t        |       }|}|dk7  r#|dt        |      z   z  }|j                  dd      }|dk7  r#|dt        |      z   z  }|j                  dd      }|S )Nr   r4   z   )normalizeNamenormalizeCommentr   normalizeBrand)r.   r/   brandnormNamekeys        r   normalizeConcatenationr{      sm    T"H
C"}s%g...kk%%{s^E***kk%%Jr   c                 (    | d k(  ryt        |       } | S )Nr   normalizeStdr   s    r   rv   rv      s    DyQAHr   c                     | d k(  ryt        |       } t        j                  dd|       } t        j                  dd|       } | S )Nr   \(.*?\)\s\sr4   )r~   r   r   r   s    r   ru   ru      s>    DyQA
z2q!A
wQAHr   c                     | d k(  ryt        |       } t        | d      } | j                  dd      } | j                  dd      } | S )Nr   Fz sasz s.a.)r    r~   r   r   s    r   rw   rw      sG    DyAAQA			&A			'"AHr   c                     t                t        |        t        |       }|j                  d      }d}|D ]#  }|dk7  s	|dk7  s|j                         }||z  }% t        |       |S )Nr4   r   )r*   r~   rL   
capitalize)r   stsoes        r   normalizeBrandForDisplayr      sg    	G	!HQA	
B
A 7qCxAFA 
!HHr   c                    | d k(  ryt        |       }|j                         }g d}|D ]  }t        j                  |d|      } |j	                         }|j                         }t        |      }|j                  dd      }|S )Nr   )z!\s(sas|sa|plc|p.l.c.|s.a.|s.a.s.)z\s(la\s|)(societe)z\s(des\sproduits)z\s(cooperative)z\s(entreprise)z\s(enseigne)r4   _)rw   rN   r   r   rstriplstriprO   r   )r   r1   allRegExregs       r   normalizeBrandForFileNamingr      s    Dy

C
))+C
H  #ffS"c"# **,C
**,C
S
!C
++c#
CJr   c                     | j                         } | j                  dd      } | j                  dd      } | j                  dd      } | S )Nr4   -   ér      è)rN   r   r   s    r   normalizeCategoriesr      sB    		A			#cA			$sA			$sAHr   c                    | }g }|j                         }|j                  d      }|D ]$  }t        |      }|dk7  s|j                  |       & d}|D ]  }|dk7  r|dz  }||z  } |j	                  dd      }t        |      }|S )Nr4   r     )rN   rL   normalizeQuantityWordappendr   reformatQuantity)expexp2allW2allWrR   w2s         r   normalizeQuantityPropositionr     s    D E::<D::c?D "1%8LL D 2:CKD
 <<c"D D!DKr   c                 f   | }|dk(  rydddddddddddddd}|D ]  }|j                  |||         } t        |      d	kD  r7|d
   dk(  r/|dk7  r*|dk7  r%|dk7  r |dk7  r|dk7  r|dk7  r|dt        |      dz
   }g d}||v rd}|j                  dd      }ddddddddddd
}	 ||   }|S #  Y |S xY w)Nr   r4   r   r   uirq   )r   zd'une d'un l'u   éer   r      ê   ô   û   î   â   à   rK   r   troistiersquartstresplusgrosr      )zd'uniteuniteentierentierelelaaueauxeauundeminormalgarnipetit)
unedemiegrossenormalegarniepetitededurq   en)r   len)rR   r   wrerrwtrwtws         r   r   r   !  sF    
B	Rx S#BcRU\_fipsz}  EH  OR  SC %ZZCG$% 2w{r"v}w2=RS[^`bfl`lqsw}q}  CE  IO  CO#b'!)_
FC	Sy 
FE	"B v(U\gnuw  A  GI  PR  SCW IIs   $B+ +B0c                    | j                         }|j                         }dg}d}d}|D ]'  }|t        |      z   }|dz  }|j                  ||      }) i ddddddd	d
ddddddddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*
}|D ]  }|j                  |||         } d}|D ]'  }|t        |      z   }|dz  }|j                  ||      }) |j                         }|j                  d+d      }|S ),NquartierzToBeIgnored#r   r   r4   d'r    et zun huitiemez1/8ztrois huitiemez3/8zcinq huitiemez5/8zsept huitiemez7/8zun quartz1/4ztrois quartsz3/4quartzun tiersz1/3z
deux tiersz2/3zun demiz1/2r   z0,5z	un moitiemoitie12345678910)
r   deuxr   quatrecinqsixsepthuitneufdixr   )rN   stripstrr   )r   r1   listToBeIgnoredsuffixr   etir   r   s           r   r   r   A  s    '')C
))+C "lOF
C #c#hqkk#r"#D8C Dr D6# DD 0D8GDO^_dDeD+ED3:5D eD *%D U	D #5	D +0	D
 uD
 'uD S#Cs[^gjsv  CDC  'kk"c"g&' C #c#hqkk"c"#
 ))+C
++dC
 CJr   c                    | j                         } | j                  dd      } | j                  dd      } t        j                  dd|       } t        j                  dd|       } t        j                  dd	|       } t        j                  d
d|       } t        j                  dd|       } t        j                  dd|       } t        j                  dd|       } | j                  dd      } | j                  dd      } | S )Nr4   r   rU      [é|è|ë|ē|ê]r   
   [ü|ù|û]r   
   [à|â|ä]rq      [ô|ö]r      [ç]c   [î|ï]r      [œ]oez--)rN   r   r   r   r   s    r   normalizeURIr   i  s    		A			#cA			#cA
"C+A
}c1%A
}c1%A
z3"A
wQA
z3"A
wa A			$sA			$sAHr   c                    | d k(  ry d| j                         z   dz   } | j                  dd      } | j                  dd      } t        j                  dd|       } t        j                  dd|       } t        j                  d	d
|       } t        j                  dd|       } t        j                  dd|       } t        j                  dd|       } t        j                  dd|       } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } |d k(  rt	        |       } | dk7  rd| z   dz   } | j                  dd      } | S )!Nr4   r   u   ™r   r   r   r   r   r   rq   r   r   r   r   r   r   r   r   z & z a z la z le r   z du z au z d'r   r   "rU   r   T)rN   r   r   r   removePlurial)r   isPlurialToBeRemoveds     r   r~   r~   }  s   Dyaggi#A			#cA			%A
"C+A
}c1%A
}c1%A
z3"A
wQA
z3"A
wa A			%A			%A			&A			&A			&A			&A			&A			%A			$rA			#cA			#cA			#cA			$sA			$sAt#!Bw!GcM			$sAHr   c                 $   | j                  d      }ddg}g }|D ][  }t        |      }||v r|j                  |       $|dkD  s*|d   dk(  r	|d|dz
   }n|d   dk(  r|d|dz
   }|j                  |       ] d	}|D ]  }|d	k7  r|dz  }||z  } |S )
Nr4   r   noixr   rK   r   r   xr   )rL   r   r   )r   wswordExceptionwrrR   lwress          r   r   r     s    	
BV$M	B 
VIIaL!Vu|a1I2#a1IIIaL
 C "93JCq
 Jr   c                     t        |       dk(  ry| j                  d      dk7  ry| j                  d      }t        |      dk  ryy)Nr   zde:rK   rU   r   )r   rl   rL   )r   r   s     r   isValidTaxonomyr    sC    
1v{ 	vve}	A
1v{r   c                    d}t        |       }|j                         }|j                  d      dk7  s|j                  d      dk7  s|j                  d      dk7  sx|j                  d      dk7  sd|j                  d      dk7  sP|j                  d      dk7  s<|j                  d      dk7  s(|j                  d	      dk7  s|j                  d
      dk7  ry|j                  d      dk7  s|j                  d      dk7  s|j                  d      dk7  s|j                  d      dk7  s|j                  d      dk7  s|j                  d      dk7  s|j                  d      dk7  s|j                  d      dk7  s|j                  d      dk7  sx|j                  d      dk7  sd|j                  d      dk7  sP|j                  d      dk7  s<|j                  d      dk7  s(|j                  d      dk7  s|j                  d      dk7  ry|j                  d      dk7  s|j                  d      dk7  ry|j                  dd      }|j	                  d      }t        |      dkD  ry|S ) Nr   0mlrK   0cl5ml5clz1 5z 1lz 2lz1 5 lr   bottlekoffeinfreiz 201u   limitéelimitedoriginal
direktsaftschorlezmanzana adesmoyenzsouth africatchequez pckz conz sin ()r   r4      )ru   rN   rl   r   rL   r   )r   rcr   tabSs       r   isValidNamer    s   	
BaA 	
	Avve}affUmr1QVVE]b5Hvve}affUmr1QVVE]b5Hvve}affUmr1QVVG_5Jvvh2!6"!<vRT@TvvjR166)#4#:vvjRvvlr!QVVI%6"%<~@VZ\@\vvg"~ 6" <y@QUW@Wvvf"v2 5B9Nvvc{bAFF3K2- 	
		#cA773<D
4y1}Ir   c                 8   g }| j                  d      }|D ]i  }|dk7  s	|j                  d      dk7  r2|j                         }|j                         }|j	                  |       Ot        j                  d| z   dz          k d}|D ]  }|dk7  r|dz  }||z  } |S )NrU   r   rc   rK   zInconsistency in the tags: 'r   )rL   rl   r   r   r   r(   r)   )tagsrTagsallTagsttagrss         r   
formatTagsr     s     EjjoG Q7vve}"hhjjjlS!##$BT$IC$OPQ 
B 8#IB
a
 Ir   c                     | }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }|S )NrU   .z[a-z]r   z<\sr4   )r   r   )r   r1   s     r   formatValuer#    sT    
C
&&sC
 C
&&2s
#C
&&S
!C
&&r3
CJr   c                 "   | j                  dd      }|j                         }|j                  dd      }|j                  d      }d}|D ]B  }|dk7  r|dz  }|j                  d      dk(  r|j                  d      dk(  r	|d|z   z  }>||z  }D |S )	NrU   /r4   r   r   rc   rK   rb   )r   rN   rL   rl   )catPathcatsallCats
newCatPathr   s        r   formatCategoriesr*  4  s    ??3s#D::<D<<C DjjoGJ #J66%=B166%=B#6%!)#J!OJ r   c                     d}d}| dk(  rd}n| }|j                         }|j                  dd      }|j                  dd      }|j                  dd      }|j                  d	d
      }|j                  dd      }t        |      dkD  si|j                  d
      dk(  r`|j                  d      dk(  rK|j                  d      dk(  r6|j                  d      dk(  r!|j                  d      dk(  r|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  d
      }|dk\  r|d |dz    }t        |      dk7  rd}n|j                  d      }|dk\  r'|d |dz    }t        |      dkD  st        |      dk  rId}nF|j                  d      }|dk\  r.|d |dz    dz   }|j                  dd      }t        |      dkD  rd}nd}|dk(  rl|}|j                  d
d      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }	 t	        |      }||fS ||fS #  d}d}Y ||fS xY w)Nr   r   r   r4   1000ml1lrU   r"  grglitrel   rK   mlclkgunpotdeunverre	unverrede1potdeunpot      r   0   
   )rN   r   r   rl   float)r   errrQ   posi_gposi_mlposi_clstrvfs           r   normalizeServingrG  F  s   
CDrzzz|||C#||HT*||C$||D%||GC(t9q=yy~#yy"$yy"$yy~#yy"$ <<	"-D<<	"-D<<B/D<<,D<<+DYYs^F{KVaZ(t9>C))D/a<1-D4y1}D	Q"iioG!|#LWq[1C7#||D6t9q="#C
ax||C#||D$||D$||C#||D$	dA
 ;C;		DC;s   I2 2I=c                     t        |       }|S Nr}   r1   rQ   s     r   processSportNamerK    s    DKr   c                 &    | j                         }|S rI  rN   rJ  s     r   processGenericNamerN        99;DKr   c                 &    | j                         }|S rI  rM  rJ  s     r   normalizeGenericNamerQ    rO  r   c                    t        |       dk(  r| S | j                         }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  dd|      }t        j                  d	d
|      }t        j                  dd|      }t	        |      }|j                  dd      }g d}d}t        d      D ]x  }|D ]q  }	 t        j                  ||      }|d k7  rC|j                         }|j                  |      }t        |      }	|d| ||t        |      z   |	 z   }|j                         }s z t        |      }|S # t        j                  $ r |dz  }Y ;w xY w)Nr<  r   r   r   r4   r   z % z% u   œr   u%   [^a-zA-Z0-9%\s\'àâôîïéèêûü];rU   )z
\s?canettez\s?bouteilleu   \s?sans\sprécisionz*(tablettes?|)\s?[0-9]+(\s|)(x|X)(-|)(\s|$)z\s?-[0-9][0-9]$z\s?[0-9]+gx[0-9]+z(\s?|\+\s?)[0-9]+\s?%$u%   \s?+offre\s(decouverte|sp(é|e)ciale)z\s?+maxi\sformatz\s?\+[0-9]+\s?offerts?$z)\s?(dont|\+|[0-9]+)\s?+[0-9]+\s?offerts?$z\s?prix\schocz\s?[0-9]+cc$z\s?[0-9]+personnes?$z\s?format\sfamilialz'\s?[0-9]+\s?(parts?|sachets?|capsules?)u   \s?[0-9](ème|er)\s(â|a)geuB   \s?(de|)\s?[0-9]+\s?(mois|ans?|)\s?à\s?[0-9]+\s?(mois|ans?)(\s|$)u1   \s?d(ès|e)\s?[0-9]+(/[0-9]|)\s?(mois|ans?)(\s|$)u   \s?(étui|(paquet|colis\sde|sachet|sachet\ssouple)|vrac|boîte|sac|)(\sde\s|\s-\s|\s)([0-9]+?(x|.|)[0-9]+|[0-9]+)\s?(g|gr|grs|l|kg|ml|cl|dz)(\snet|(\s|$))z\s?carton\sde\s[0-9]z9\s?[0-9]+\s?(oz|litre|l|gramme(s|)|gr|kilogramme(s|)|kg)$z\s(bv|a|u|,|-|--)$z\s[x|]\s?[0-9]+x$z\s[x]\s?[0-9]z\.$r   r   )r   rN   r   r   r    r   rangesearchgrouprl   errorr   rO   )
r1   ltxtr   nbRegExErrorr   rtstooposilgs
             r   processNamer_    sx    3x1}
 99;D 66*b$'D66'3%D66$T"D66&$%D66%t$D66:2dCD t$D<<C D
HD L1X ! 	!A
"ii4($;B  99R=DTB$<$tCG|B*??D
 ;;=D	!!$ d#DK 88 "!"s   "AE!!E<;E<c                 v    t        |       } | j                  dd      } | j                         }t        |       } | S NrS  rU   )r    r   rN   rO   )r1   rX  s     r   processBrandrb    s6    
c
"C
++c#
C99;D
S
!CJr   c                 |    | }|j                         }t        j                  dd|      }|j                  dd      }|S )Nz	[\n\r;_]*r   r   r4   )rN   r   r   r   )r   r1   s     r   processIngredientsrd    s;     C
))+C
&&r3
'C
++dC
 CJr   c                 `    t        |       } | j                         } | j                  dd      } | S ra  )r    rN   r   )r1   s    r   processCommentrf    s,    
c
"C
))+C
++c#
CJr   c                     d}d}d}|D ]5  }t        j                  ||       }|r|j                  d      d   }|}|dz  }7 |S )NrK   r   r   )r   matchspan)rM   regexTabregPosir   lastPosiregexps          r   isRegexCompliantro    sY    G
CH HHUE"vvay|HGq Nr   c                 ,   | j                  dd      }g d}|D ]  }t        j                  |d|      } |j                         }|j	                         }|j                  d      }|j                         }|j	                         }|j                  d      }|j                  d      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  d	d
      }|j                  dd      }|S )Nz""z%%)
z((\s|^)cuit(s|es|e|))u   ((\s|^)appertisé(s|es|e|))u   (préemballé(s|es|e|))z((\s|^)rayon\sfrais)u   ((\s|^)sans\sprécision)z((\s|^)aliment\smoyen)u   ((\s|^)à\sréchauffer)z((\s|^)et autres)u   ((\s|^)prêt\sà\sconsommer)z((\s|^)etc)r   rU   r   z,,z, ,z ,z, r   r4   )r   r   r   r   r   r   )iTxtr1   r   r   s       r   simplifyCommentrr  #  s     ,,tD
!C
H  #ffS"c"# **,C
**,C
))C.C
**,C
**,C
))C.C
))C.C
++d3
C
++d3
C
++d3
C
++eC
 C ++d4
 C
++d3
CJr   c           
         | j                  dd      j                  dd      }dddddddddd		}|D ]  }|j                  |||         } |j                  d      }t        |      }t        |      D ]>  }||   }t        |      d
kD  r$|j	                         }|j                         ||<   :d||<   @ dj                  |      }	|	S )Nr   r4   r   r   r   r   r   rq   )	r   r   r   r   r   r   r   r   r   r   r   )r   rL   r   rT  rN   r   join)
r   iTextr   r   tabnbwr   r  ltr1   s
             r   setSimpleCamelCaseFormatry  P  s     LLc"++C5E3Ss3UX_b
cC +b#b'*+ ++c
C c(C3Z Fq6A:B]]_CFCF ''#,CJr   c                    | j                  d      }t        |      }t        |      D ]e  }||   }t        |      dkD  rK|j                         }|dv r|dk7  r|||<   5|dv r|j	                         ||<   M|j                         ||<   ad||<   g d}t        |      D ]!  }|||   z  }||dz
  k7  s||   dk7  s|dz  }# |j                  d      }t        |      }t        d|      D ]$  }||   d d j                         ||   dd  z   ||<   & d}t        |      D ]!  }|||   z  }||dz
  k7  s||   dk7  s|dz  }# |j                  dd	      }|j                  d
d      }|S )Nr4   r   )r   r   oudesetpourr{  r   auxr   r   sansr   )aopbiomguhtr   r   r   r=   r   rD   r   )rL   r   rT  rN   upperr   r   )r   rv  rw  r   r  rx  r1   s          r   rO   rO   h  s   
**S/C
c(C3Z Fq6A:BiinorsnsA22AACF C3Z s1vA:#a&B,3JC ))C.C
c(C1S\ 6Q&&(3q6!":5A6 C3Z s1vA:#a&B,3JC ++d4
 C
++d4
 CJr   c                    d}| dk(  r|S | j                         } t        |       }| dd dk(  r
| d| } d| z   } | j                  dd      } | j                  dd      } | j                  d	d      } | j                  d
d      } | j                  dd      } t        |       }| |dz
     dk(  s| |dz
     dk(  r| d d } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | j                         } | j	                         } g d}d}|D ]G  }	 t        j                  ||       }|d k7  r)t        j                  d|       }|j                         } |S I |S # t
        j                  $ r |dz  }Y fw xY w) Nr   r   r<  z1 r   r   z**u   ?²?u   ?³?   ¹   ²r"  *rK   grmr/  grsr   r   r   z grammesz grammezpour 1 z	pour une zpour un zpour 2 z
pour deux z g.z gr.)z^[0-9]+$z^\([0-9]+\s?+(g|ml|gr)\)$z^[0-9]+\s?(g|ml|gr)$z^(par|pour|):?\s?(une|deux|trois|)\s?(pot|brique|croque|stick|bouchee|boules?|tranches?|parts?|portions?|cookies?|saucisses?|knackis?|bouchees?|barquettes?|billes?|carres?|madeleines?|barres?|)(\sde\s|\s=\s|\s|)\(?[0-9]+(.|,|)[0-9]\s?(g|ml|gr)\)?$z5^pour [0-9]+\s?(g|ml|gr) de (produit|produit egoutte)z[0-9]+)	rN   r   r   r   r   r   rU  rV  rW  )r1   r\  nbcr   rY  rZ  r[  tst2s           r   processServingSizer    s    
B
by	 ))+C
c(C
1Qx4!Cjck
++dB
C
++fb
!C
++fb
!C
++dB
C
++dB
C
c(C
3q5zSCAJ#-#2h
++eS
!C
++eS
!C
++dC
 C
++dC
 C
++j#
&C
++i
%C
++i
-C
++j+
.C
++i
.C
++eS
!C
++fc
"C
**,C
**,C
H L 	))As#Cd{yyC0ZZ\ I  I xx 	AL	s   )AG11HHc                     |dk7  rt        |        t        |       | D ]'  }|D ]   }|dk7  rt        |dz   |z          ||k(  s  y ) y)Nr   z    r   )r*   )allNormBrand1allNormBrand2dbgn1n2s        r   isIdenticalBrandr    s^    
axmm  	Baxb6kB&'Rx		 r   )T)r   )0stringcsvsystimeplatformr	   jsonior   KCALLMUtilitiesr(   r   r    r2   rS   rs   r{   rv   ru   rw   r   r   r   r   r   r   r   r~   r   r  r  r   r#  r*  rG  rK  rN  rQ  r_  rb  rd  rf  ro  rr  ry  rO   r  r   r   r   <module>r     s    ' ' '   	 	 #	D@3l

 <6@$P((V8B0	R$>BVt)Z0&P;~
r   