
    =0fc                     8   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/dS )*    Nc                 L   t          j                    }| d         |         }|dk    r|}n;| d         |         | d         |         z   | d         |         z   | d         |         z   }|                    d          }|                    |           |                                }|S )NV_GTIN V_Name	V_CommentV_Trademarkzutf-8)hashlibmd5encodeupdate	hexdigest)dfidxmgtinsnbskeys          @/home/debian/html/nutritwin/resources/KCADBProcessorUtilities.py
computeKeyr      s    Ah<Drzz\#Hc!22R_S5IIB}L]^aLbb
		'AHHQKKK;;==DK    c                     | d k    rd S |                      dd          }t          j        dd|          }t          j        dd|          }|                     dd          }|S )Nz&quot;'z[\n\r]*r   u   [®]*\)replaceresub)iStrns     r   removeExoticMarkersr       sa    t||tXc""A
z2q!!A
xQA			$AHr   c                    d}	 | d         }| d         }| d         }| d         }|dk    rF||z   |z   |z   }t          j        |                                          }|                                }nt	          j        d           nW#  t	          j        d           t          d	           t          d
           t          |            t          d	           Y nxY w|dz   |z   }|| d<   d S )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CJJLL))A++--CC  <===]5666[\\\kg[\\\\\
s
S
 CGFO
Fs   B B ACc                 J   t          |           }|                    d          }d}|D ]}|                                }|dk    rd}n|dk    rd}n|dk    rd}n|d	k    rd
}n|dk    sl|dk    sf|dk    s`|dk    sZ|dk    sT|dk    sN|dk    sH|dk    sB|dk    s<|dk    s6|dk    s0|dk    s*|dk    s$|dk    s|dk    s|dk    s|dk    s|dk    s|dk    r|                                }||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  GGII::AA%ZZAA'\\AA%ZZAA$YY!t))qDyyAIIeqTXyy\]af\f\f3hh!v++da4ii1994ii199T		Q$YY!t))4iiAKK		Aax#~9DBCCyCCRCyd##DKr   c                 @   | dk    rdS d}|                      d          }g d}|D ]}||v r|dk    r|dz  }||z  }|                    d          dk    s|                    d          dk    rt          j        d|z              d}|                                }|dk    rd	}nb|d
k    rd}nY|dk    rd}nP|dk    rd}nG|dk    rd}n>|dk    rd}n5|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k    r|dk    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   
byyrD	3B5 5 5E  ( (::rzzAIDD vve}}!!QVVE]]a%7%7#$6$:;;; B''))Cf}}"***##!
""7
""!	!! 	!!$$%	!!&Rxx2::CKD
Kr   c                     t          |           }|}|dk    r+|dt          |          z   z  }|                    dd          }|dk    r+|dt          |          z   z  }|                    dd          }|S )Nr   r4   z   )normalizeNamenormalizeCommentr   normalizeBrand)r.   r/   brandnormNamekeys        r   normalizeConcatenationr{      s    T""H
C"}}s%g....kk%%%{{s^E****kk%%%Jr   c                 4    | d k    rdS t          |           } | S )Nr   normalizeStdr   s    r   rv   rv      s     DyyrQAHr   c                     | d k    rdS t          |           } t          j        dd|           } t          j        dd|           } | S )Nr   \(.*?\)\s\sr4   )r~   r   r   r   s    r   ru   ru      sF    DyyrQA
z2q!!A
wQAHr   c                     | d k    rdS t          |           } t          | d          } |                     dd          } |                     dd          } | S )Nr   Fz sasz s.a.)r    r~   r   r   s    r   rw   rw      sW    DyyrAAQA			&A			'"AHr   c                     t                       t          |            t          |           }|                    d          }d}|D ]'}|dk    r|dk    r|                                }||z  }(t          |           |S )Nr4   r   )r*   r~   rL   
capitalize)r   stsoes        r   normalizeBrandForDisplayr      s|    	GGG	!HHHQA	
B
A  77qCxxAFA	!HHHHr   c                 4   | d k    rdS t          |           }|                                }g d}|D ]}t          j        |d|          }|                                }|                                }t          |          }|                    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    Dyyr


C
))++C
 
 
H  # #fS"c""
**,,C
**,,C
S
!
!C
++c#

CJr   c                     |                                  } |                     dd          } |                     dd          } |                     dd          } | S )Nr4   -   ér      è)rN   r   r   s    r   normalizeCategoriesr      sM    			A			#cA			$sA			$sAHr   c                 6   | }g }|                                 }|                    d          }|D ],}t          |          }|dk    r|                    |           -d}|D ]}|dk    r|dz  }||z  }|                    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%%88LL D  2::CKD
<<c""D D!!DKr   c                    | }|dk    rdS dddddddddddddd}|D ]}|                     |||                   }t          |          d	k    rJ|d
         dk    r>|dk    r8|dk    r2|dk    r,|dk    r&|dk    r |dk    r|dt          |          dz
           }g d}||v rd}|                     dd          }ddddddddddd
}	 ||         }n#  Y nxY w|S )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   !  s    
B	Rxxr S#BcRU\_fipsz}  EH  OR  S  SC % %ZZCG$$ 2ww{{r"v}}w2==RS[^^`bfl`l`lqsw}q}q}  CE  IO  CO  CO#b''!)_
F
F
FC	Syy 
FE	"	"B v(U\gnuw  A  GI  PR  S  SCWIs   C Cc                 J   |                                  }|                                }dg}d}d}|D ]/}|t          |          z   }|dz  }|                    ||          }0i 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 ]}|                    |||                   }d}|D ]/}|t          |          z   }|dz  }|                    ||          }0|                                }|                    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#hh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 D DC  ' 'kk"c"g&& C # #c#hhqkk"c""
))++C
++dC
 
 CJr   c                    |                                  } |                     dd          } |                     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|           } |                     dd          } |                     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   Tc                    | d k    rd S d|                                  z   dz   } |                     dd          } |                     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|           } |                     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 k    rt	          |           } | dk    rd| z   dz   } |                     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"   Dyytaggii#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##!Bww!GcM			$sAHr   c                 b   |                      d          }ddg}g }|D ]y}t          |          }||v r|                    |           +|dk    rH|d         dk    r|d|dz
           }n|d         dk    r|d|dz
           }|                    |           zd	}|D ]}|d	k    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 
 
VVIIaLLLL!VVu||a1fI2#a1fIIIaLLL
C  "993JCqJr   c                     t          |           dk    rdS |                     d          dk    rdS |                     d          }t          |          dk    rdS dS )Nr   zde:rK   rU   r   )r   rl   rL   )r   r   s     r   isValidTaxonomyr    sZ    
1vv{{q 	vve}}q	A
1vv{{q1r   c                    d}t          |           }|                                }|                    d          dk    s|                    d          dk    s|                    d          dk    s|                    d          dk    s}|                    d          dk    sd|                    d          dk    sK|                    d          dk    s2|                    d	          dk    s|                    d
          dk    rdS |                    d          dk    sa|                    d          dk    sG|                    d          dk    s-|                    d          dk    s|                    d          dk    s|                    d          dk    s|                    d          dk    s|                    d          dk    s|                    d          dk    s|                    d          dk    s}|                    d          dk    sd|                    d          dk    sK|                    d          dk    s2|                    d          dk    s|                    d          dk    rdS |                    d          dk    s|                    d          dk    rdS |                    dd          }|                    d          }t          |          dk    rdS |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}}affUmmr11QVVE]]b5H5Hvve}}affUmmr11QVVE]]b5H5Hvve}}affUmmr11QVVG__5J5Jqvvh2!6!6"!<!<vRT@T@TvvjR166)#4#4#:#:vvjRvvlr!!QVVI%6%6"%<%<~@V@VZ\@\@\vvg"~ 6 6" < <y@Q@QUW@W@Wvvf"v2 5 5B9N9Nqvvc{{bAFF3KK2--q 	
		#cA773<<D
4yy1}}qIr   c                 Z   g }|                      d          }|D ]y}|dk    rq|                    d          dk    r>|                                }|                                }|                    |           _t          j        d| z   dz              zd}|D ]}|dk    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ooG Q Q77vve}}""hhjjjjllS!!!!#$BT$IC$OPPP 
B  88#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#    sX    
C
&sC
 
 C
&2s
#
#C
&S
!
!C
&r3

CJr   c                 T   |                      dd          }|                                }|                     dd          }|                    d          }d}|D ]M}|dk    r|dz  }|                    d          dk    r"|                    d          dk    r	|d|z   z  }H||z  }N|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ooGJ  #J66%==B166%==B#6#6%!)#JJ!OJJr   c                 (   d}d}| dk    rd}no| }|                                 }|                    dd          }|                    dd          }|                    dd          }|                    d	d
          }|                    dd          }t          |          dk    s|                    d
          dk    r|                    d          dk    r|                    d          dk    r|                    d          dk    rp|                    d          dk    rV|                    dd          }|                    dd          }|                    dd          }|                    dd          }|                    dd          }|                    d
          }|dk    r#|d |dz            }t          |          dk    rd}n|                    d          }|dk    r6|d |dz            }t          |          dk    st          |          dk    rd}nY|                    d          }|dk    r<|d |dz            dz   }|                    dd          }t          |          dk    rd}nd}|dk    r|}|                    d
d          }|                    dd          }|                    dd          }|                    dd          }|                    dd          }	 t	          |          }n#  d}d}Y nxY w||fS )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rzzzz||||C##||HT**||C$$||D%%||GC((t99q==yy~~##yy"$$yy"$$yy~~##yy"$$ <<	"--D<<	"--D<<B//D<<,,D<<++DYYs^^F{{KVaZK(t99>>C))D//a<<1-D4yy1}}D		Q"iiooG!||#LWq[L1C7#||D66t99q=="#C
axx||C##||D$$||D$$||C##||D$$	dAA	DCCC;s   5L Lc                 $    t          |           }|S Nr}   r1   rQ   s     r   processSportNamerK    s    DKr   c                 .    |                                  }|S rI  rN   rJ  s     r   processGenericNamerN        99;;DKr   c                 .    |                                  }|S rI  rM  rJ  s     r   normalizeGenericNamerQ    rO  r   c                 R   t          |           dk    r| S |                                 }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	          |          }|                    dd          }g d}d}t          d          D ]}|D ]}	 t          j        ||          }|d k    r]|                                }|	                    |          }t          |          }	|d|         ||t          |          z   |	         z   }n# t          j
        $ r |dz  }Y nw xY w|                                }t          |          }|S )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_    s    3xx1}}
 99;;D 6*b$''D6'3%%D6$T""D6&$%%D6%t$$D6:2dCCD t$$D<<C  D
 
 
HD L1XX ! ! 	! 	!A
"i4(($;;B  99R==DTB$<$tCGG|B*??D8 " " "!" ;;==DD	!" d##DKs   /A8E((E?>E?c                     t          |           } |                     dd          } |                                 }t          |           } | S NrS  rU   )r    r   rN   rO   )r1   rX  s     r   processBrandrb    sA    
c
"
"C
++c#

C99;;D
S
!
!CJr   c                     | }|                                 }t          j        dd|          }|                    dd          }|S )Nz	[\n\r;_]*r   r   r4   )rN   r   r   r   )r   r1   s     r   processIngredientsrd    sA     C
))++C
&r3
'
'C
++dC
 
 CJr   c                 x    t          |           } |                                 } |                     dd          } | S ra  )r    rN   r   )r1   s    r   processCommentrf    s4    
c
"
"C
))++C
++c#

CJr   c                     d}d}d}|D ];}t          j        ||           }|r|                    d          d         }|}|dz  }<|S )NrK   r   r   )r   matchspan)rM   regexTabregPosir   lastPosiregexps          r   isRegexCompliantro    sa    G
CH  HUE"" 	vvayy|HGqNr   c                    |                      dd          }g d}|D ]}t          j        |d|          }|                                }|                                }|                    d          }|                                }|                                }|                    d          }|                    d          }|                     dd          }|                     dd          }|                     dd          }|                     dd          }|                     d	d
          }|                     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  # #fS"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           
         |                      dd                               dd          }dddddddddd		}|D ]}|                     |||                   }|                    d          }t          |          }t          |          D ]N}||         }t          |          d
k    r,|                                }|                                ||<   Id||<   Od                    |          }	|	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55E3Ss3UX_b
c
cC + +b#b'** ++c

C c((C3ZZ  Fq66A::B]]__CFFCFF
''#,,CJr   c                 x   |                      d          }t          |          }t          |          D ]z}||         }t          |          dk    rX|                                }|dv r|dk    r|||<   A|dv r|                                ||<   ]|                                ||<   ud||<   {d}t          |          D ]'}|||         z  }||dz
  k    r||         dk    r|dz  }(|                     d          }t          |          }t          d|          D ]8}||         d d                                         ||         dd          z   ||<   9d}t          |          D ]'}|||         z  }||dz
  k    r||         dk    r|dz  }(|                    dd	          }|                    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3ZZ  Fq66A::BiiinorsnsnsA222AACFF
C3ZZ  s1vA::#a&B,,3JC ))C..C
c((C1S\\ 6 6Q&&((3q6!"":5A
C3ZZ  s1vA::#a&B,,3JC ++d4
 
 C
++d4
 
 CJr   c                    d}| dk    r|S |                                  } t          |           }| dd         dk    r| d|         } d| z   } |                     dd          } |                     dd          } |                     d	d          } |                     d
d          } |                     dd          } t          |           }| |dz
           dk    s| |dz
           dk    r
| d d         } |                     dd          } |                     dd          } |                     dd          } |                     dd          } |                     dd          } |                     dd          } |                     dd          } |                     dd          } |                     dd          } |                     dd          } |                     dd          } |                                 } |                                 } g d}d}|D ]c}	 t          j        ||           }|d k    r+t          j        d|           }|                                } nJ# t
          j        $ r |dz  }Y `w xY w|S ) 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
byy	 ))++C
c((C
1Q3x4!C%jck
++dB

C
++fb
!
!C
++fb
!
!C
++dB

C
++dB

C
c((C
3q5zSCAJ#--#2#h
++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{{yC00ZZ\\  x 	 	 	ALLL	 Is   AII32I3c                     |dk    rt          |            t          |           | D ],}|D ]'}|dk    rt          |dz   |z              ||k    r  dS (-dS )Nr   z    r   )r*   )allNormBrand1allNormBrand2dbgn1n2s        r   isIdenticalBrandr    s    
axxmm   	 	Baxxb6kB&'''Rxxqqq 	
 1r   )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 3 3l    
 
 

 
 
     <    6  @$ $ $P  (( ( ( (V  8    B  0	 	 	R  $> > >B      V V Vt        ) ) )Z  0& & &P; ; ;~
 
 
 
 
 
r   