рдПрдХ рдордВрдЪ рдХреЗ рд╡рд┐рд╖рдпрдЧрдд рдореЙрдбрд▓рд┐рдВрдЧ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдпрд╛ рд╕реАрд▓рд┐рдПрдХ рд░реЛрдЧ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдХреНрдпрд╛ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдФрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдиреНрдпреВрдирддрдо рдбреЗрдЯрд╛ рд╡рд┐рдЬреНрдЮрд╛рди рдЕрдиреБрднрд╡ рд╡рд╛рд▓рд╛ рд╡реНрдпрдХреНрддрд┐ рдлреЛрд░рдо рд╕реЗ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдФрд░ рдПрд▓рдбреАрдП рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреЛрд╕реНрдЯ рдХреЗ рд╡рд┐рд╖рдпрдЧрдд рдореЙрдбрд▓рд┐рдВрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рдФрд░ рд╕реАрд▓рд┐рдПрдХ рдЕрд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рджрд░реНрджрдирд╛рдХ рд╡рд┐рд╖рдпреЛрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ред

рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдореБрдЭреЗ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЕрдкрдиреЗ рдЬреНрдЮрд╛рди рдореЗрдВ рддрддреНрдХрд╛рд▓ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдореИрдВ рдбреЗрдЯрд╛ рд╕рд╛рдЗрдВрд╕, рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдФрд░ AI рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдкрд╛рдж рдкреНрд░рдмрдВрдзрдХ рд╣реВрдВ, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рддрдХрдиреАрдХреА рдЙрддреНрдкрд╛рдж рдкреНрд░рдмрдВрдзрдХ AI / MLред рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдХреМрд╢рд▓ рдФрд░ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рддрдХрдиреАрдХреА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВред рдЖрдкрдХреЛ рдПрдордПрд▓ рдЙрджреНрдпреЛрдЧ рдХреА рдмреБрдирд┐рдпрд╛рджреА рддрдХрдиреАрдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЙрддреНрдкрд╛рдж рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛред

рд▓рдЧрднрдЧ 5 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдореИрдВ рдлреНрд░рдВрдЯ-рдПрдВрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЗрдПрд╕ рдФрд░ рд░рд┐рдПрдХреНрдЯ рдкрд░ рдЬрдЯрд┐рд▓ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ, рд▓реИрдкрдЯреЙрдк рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реЗ рдХрднреА рдирд╣реАрдВ рдирд┐рдкрдЯрд╛ред рдЗрд╕рд▓рд┐рдП, рдЬрдм рдореИрдВрдиреЗ рдУрдЯрд╕ рд╕реЗ рд╕рдорд╛рдЪрд╛рд░ рджреЗрдЦрд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдкрд░ рдкрд╛рдВрдЪ рдорд╣реАрдиреЗ рдХрд╛ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдкрд╛рдареНрдпрдХреНрд░рдо рдЦреЛрд▓рд╛ рд╣реИ , рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╣рд┐рдЪрдХрд┐рдЪрд╛рд╣рдЯ рдХреЗ, рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдкрд╛рдареНрдпрдХреНрд░рдо рдкрд░ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ред

рдкрд╛рдБрдЪ рдорд╣реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рд░ рд╣рдлреНрддреЗ рдЙрдирдХреЗ рд▓рд┐рдП рджреЛ рдШрдВрдЯреЗ рдХреЗ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдФрд░ рд╣реЛрдорд╡рд░реНрдХ рд╣реЛрддреЗ рдереЗред рд╡рд╣рд╛рдБ рдореИрдВрдиреЗ ML рдХреА рдореВрд▓ рдмрд╛рддреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛: рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рддрд┐рдЧрдорди рдПрд▓реНрдЧреЛрд░рд┐рджрдо, рд╡рд░реНрдЧреАрдХрд░рдг, рдореЙрдбрд▓ ensembles, рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдмреВрд╕реНрдЯрд┐рдВрдЧ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдереЛрдбрд╝реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХреНрд▓рд╛рдЙрдб рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрджрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рд╕реБрдирддреЗ рд╣реИрдВ, рддреЛ рд╣реЛрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реИрдВред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдХрднреА-рдХрднреА, рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЛрдбрд┐рдВрдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рддрд░рд╣, рдореБрдЭреЗ рдкреНрд░рд▓реЗрдЦрди рдХреА рдУрд░ рдореБрдбрд╝рдирд╛ рдкрдбрд╝рд╛ред рдореЗрд░реЗ рдкреВрд░реНрдгрдХрд╛рд▓рд┐рдХ рд░реЛрдЬрдЧрд╛рд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╣рдореЗрд╢рд╛ рдПрдХ рдСрдирд▓рд╛рдЗрди рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рдерд╛ред

рдЗрд╕ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╕рднреА рдХреЛ рдЕрдВрддрд┐рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рд▓реЗрдиреА рдереАред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдХрд╛рдлреА рд╕рд╣рдЬрддрд╛ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реБрдЖ, рдЬрд┐рд╕ рд╕рдордп рдореИрдВрдиреЗ рд╕реНрдЯреИрдирдлреЛрд░реНрдб рдореЗрдВ рдЙрджреНрдпрдорд┐рддрд╛ рдХрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╢реБрд░реВ рдХрд┐рдпрд╛, рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдЙрд╕ рдЯреАрдо рдкрд░ рдорд┐рд▓рд╛, рдЬрд┐рд╕рдиреЗ рд╕реАрд▓рд┐рдПрдХ рдЕрд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛ред рдмрд╛рдЬрд╛рд░ рдЕрдиреБрд╕рдВрдзрд╛рди рдХреЗ рджреМрд░рд╛рди, рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдереА рдХрд┐ рдХреНрдпрд╛ рдЪрд┐рдВрддрд╛ рд╣реИ, рд╡реЗ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддреЗ рд╣реИрдВред

рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдЕрдзреНрдпрдпрди рдЖрдЧреЗ рдмрдврд╝рд╛, рдореБрдЭреЗ celiac.com рдкрд░ рдПрдХ рдордВрдЪ рдорд┐рд▓рд╛рд╕реАрд▓рд┐рдПрдХ рд░реЛрдЧ рдкрд░ рд╕рд╛рдордЧреНрд░реА рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХреЗ рд╕рд╛рдеред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдерд╛ рдХрд┐ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рдФрд░ 100 рд╣рдЬрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рдкреЛрд╕реНрдЯ рдкрдврд╝рдирд╛ рдЕрд╡реНрдпрд╡рд╣рд╛рд░рд┐рдХ рдерд╛ред рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛, рдЗрд╕ рдкрд╛рдареНрдпрдХреНрд░рдо рдореЗрдВ рдореБрдЭреЗ рдЬреЛ рдЬреНрдЮрд╛рди рдорд┐рд▓рд╛ рд╣реИ, рдЙрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд┐рд╖рдп рд╕реЗ рдордВрдЪ рд╕реЗ рд╕рднреА рдкреНрд░рд╢реНрдиреЛрдВ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд╖рдпрдЧрдд рдореЙрдбрд▓рд┐рдВрдЧ рдХрд░рдирд╛ред

рдЪрд░рдг 1. рдордВрдЪ рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣


рдордВрдЪ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдХрдИ рд╡рд┐рд╖рдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдЗрд╕ рдордВрдЪ рдореЗрдВ рд▓рдЧрднрдЧ 115,000 рд╡рд┐рд╖рдп рдФрд░ рд▓рдЧрднрдЧ рдПрдХ рд▓рд╛рдЦ рдкреЛрд╕реНрдЯ рд╣реИрдВ, рдЙрди рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рдеред рдореИрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдк-рднрд╛рдЧ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрддрд╛ рдерд╛ "рд╕реЗрд▓рд┐рдВрдЧ рдбрд┐рдЬреАрдЬ рдХреЗ рд╕рд╛рде рдореБрдХрд╛рдмрд▓рд╛" , рдЬрд┐рд╕рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рдЕрд░реНрде "рд╕реЗрд▓рд┐рдпрд╛рдХ рдмреАрдорд╛рд░реА рд╕реЗ рдЧреНрд░рд╕реНрдд" рд╣реИ, рдЕрдЧрд░ рд░реВрд╕реА рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдЕрдзрд┐рдХ "рд╕реАрд▓рд┐рдПрдХ рд░реЛрдЧ рдХреЗ рдирд┐рджрд╛рди рдХреЗ рд╕рд╛рде рд░рд╣рдирд╛ рдФрд░ рдХрд┐рд╕реА рддрд░рд╣ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛" рд╣реИред рдЗрд╕ рдЙрдк-рд╡рд┐рд╖рдп рдореЗрдВ рд▓рдЧрднрдЧ 175,000 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВред

рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдбрд┐рдВрдЧ рджреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╣реБрдИред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд╡рд┐рд╖рдп рдХреЗ рддрд╣рдд рд╕рднреА рдкреГрд╖реНрдареЛрдВ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рдкрдбрд╝рд╛ рдФрд░ рд╕рднреА рдкрджреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рд▓рд┐рдВрдХ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рддрд╛рдХрд┐ рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ, рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдПрдХрддреНрд░ рдХрд░ рд╕рдХреВрдВред

url_coping = 'https://www.celiac.com/forums/forum/5-coping-with-celiac-disease/'

рдЪреВрдВрдХрд┐ рдордВрдЪ рдирд┐рдХрд▓рд╛ рдХрд╛рдлреА рдкреБрд░рд╛рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдореИрдВ рдмрд╣реБрдд рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдерд╛ рдФрд░ рд╕рд╛рдЗрдЯ рдкрд░ рдХрд┐рд╕реА рднреА рд╕реБрд░рдХреНрд╖рд╛ рдореБрд╕реАрдмрддреЛрдВ рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ, рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдПрдЬреЗрдВрдЯ рд╕рдВрдпреЛрдЬрди рд╕реЗ fake_useragent , рдмреНрдпреВрдЯреАрдлреБрд▓ рд╕реВрдк рдкреБрд╕реНрддрдХрд╛рд▓рдп html рдорд╛рд░реНрдХрдЕрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдкреГрд╖реНрдареЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрддрд╛:


# Get total number of pages
def get_pages_count(url):
    response = requests.get(url, headers={'User-Agent': UserAgent().chrome})
    soup = BeautifulSoup(response.content, 'html.parser')
    last_page_section = soup.find('li', attrs = {'class':'ipsPagination_last'})
    if (last_page_section):
        count_link = last_page_section.find('a')
        return int(count_link['data-page'])
    else: 
        return 1

coping_pages_count = get_pages_count(url_coping)

рдФрд░ рдлрд┐рд░ рдмреНрдпреВрдЯреАрдлреБрд▓ рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдбреЗрдЯрд╛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЗ HTML рдбреЛрдо рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ ред


# collect pages
def retrieve_pages(pages_count, url):
    pages = []
    for page in range(pages_count):
        response = requests.get('{}page/{}'.format(url, page), headers={'User-Agent': UserAgent().chrome})
        soup = BeautifulSoup(response.content, 'html.parser')
        pages.append(soup)
    return pages

coping_pages = retrieve_pages(coping_pages_count, url_coping)

рдбреЗрдЯрд╛ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: DOM рдореЗрдВ рдЗрди рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдвреВрдВрдвреЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВред рдореИрдВ рдЦреБрдж рдлреНрд░рдВрдЯ-рдПрдВрдб рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕реЗ рдЖрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдШрд░ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдорд╛рдореВрд▓реА рдерд╛ред

def collect_post_info(pages):
    posts = []
    for page in pages:
        posts_list_soup = page.find('ol', attrs = {'class': 'ipsDataList'}).findAll('li', attrs = {'class': 'ipsDataItem'})
        for post_soup in posts_list_soup:
            post = {}
            post['id'] = uuid.uuid4()
            # collecting titles and urls
            title_section = post_soup.find('span', attrs = {'class':'ipsType_break ipsContained'})
            if (title_section):
                title_section_a = title_section.find('a')
                post['title'] = title_section_a['title']
                post['url'] = title_section_a['data-ipshover-target']
            # collecting author & last action
            author_section = post_soup.find('div', attrs = {'class':'ipsDataItem_meta'})
            if (author_section):
                author_section_a = post_soup.find('a')
                author_section_time = post_soup.find('time')
                post['author'] = author_section_a['data-ipshover-target']
                post['last_action'] = author_section_time['datetime']
            # collecting stats
            stats_section = post_soup.find('ul', attrs = {'class':'ipsDataItem_stats'})
            if (stats_section):
                stats_section_replies = post_soup.find('span', attrs = {'class':'ipsDataItem_stats_number'})
                if (stats_section_replies):
                    post['replies'] = stats_section_replies.getText()
                stats_section_views = post_soup.find('li', attrs = {'class':'ipsType_light'})
                if (stats_section_views):
                    post['views'] = stats_section_views.find('span', attrs = {'class':'ipsDataItem_stats_number'}).getText()
            posts.append(post)
    return posts

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рд▓рдЧрднрдЧ резрел,рекрелреж рдкрдж рдПрдХрддреНрд░ рдХрд┐рдПред

coping_posts_info = collect_post_info(coping_pages)

рдЕрдм рдЙрдиреНрд╣реЗрдВ DataFrame рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рд╕реБрдВрджрд░ рд░реВрдк рд╕реЗ рд╡рд╣рд╛рдВ рд▓реЗрдЯ рдЬрд╛рдПрдБ, рдФрд░ рдЙрд╕реА рд╕рдордп рдЙрдиреНрд╣реЗрдВ рдПрдХ csv рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рдЬрдм рд╕рд╛рдЗрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдЧрд▓рддреА рд╕реЗ рдЯреВрдЯ рдЬрд╛рдП рдпрд╛ рдлрд┐рд░ рдореИрдВрдиреЗ рдЧрд▓рддреА рд╕реЗ рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реЛ рддреЛ рдЬрдм рдЖрдкрдХреЛ рд╕рд╛рдЗрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рддреЛ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛ред

df_coping = pd.DataFrame(coping_posts_info, 
               columns =['title', 'url', 'author', 'last_action', 'replies', 'views']) 

# format data
df_coping['replies'] = df_coping['replies'].astype(int)
df_coping['views'] = df_coping['views'].apply(lambda x: int(x.replace(',','')))
df_coping.to_csv('celiac_forum_coping.csv', sep=',')

рдкрджреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рд╕реНрд╡рдпрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рд╛ред

def collect_postpage_details(pages, df):
    comments = []
    for i, page in enumerate(pages):
        articles = page.findAll('article')
        for k, article in enumerate(articles):
            comment = {
                'url': df['url'][i]
            }
            if(k == 0):
                comment['question'] = 1
            else:
                comment['question'] = 0
            # collecting comments
            comment_section = article.find('div', attrs = {'class':'ipsComment_content'})
            if (comment_section):
                comment_section_p = comment_section.find('p')
                if(comment_section_p):
                    comment['comment'] = comment_section_p.getText()
            comment['date'] = comment_section.find('time')['datetime']
            author_section = article.find('strong')
            if (author_section):
                author_section_url = author_section.find('a')
                if (author_section_url):
                    comment['author'] = author_section_url['data-ipshover-target']
            comments.append(comment)
    return comments

coping_data = collect_postpage_details(coping_comments_pages, df_coping)
df_coping_comments.to_csv('celiac_forum_coping_comments_1.csv', sep=',')


рдЪрд░рдг 2 рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рд╡рд┐рд╖рдпрдЧрдд рдореЙрдбрд▓рд┐рдВрдЧ


рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ, рд╣рдордиреЗ рдордВрдЪ рд╕реЗ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдФрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА 153777 рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдВрддрд┐рдо рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред

рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рдореИрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рд╡рд╣ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдереА: рдореИрдВрдиреЗ рд╢реАрд░реНрд╖ 30 рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рджреЗрдЦреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рд╖рдпреЛрдВ рдФрд░ 30 рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╡рд╛рд▓реЗ рд╡рд┐рд╖рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдБрдХрдбрд╝реЗ рдирд┐рдХрд╛рд▓реЗред



рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рджреЗрдЦреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреЛрд╕реНрдЯ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЯрд┐рдкреНрдкрдгреА рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреАрдВред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рднреА, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╢реАрд░реНрд╖рдХ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВред рдЙрдирдХреЗ рдирд╛рдо рдЕрдзрд┐рдХ рднрд╛рд╡рдирд╛рддреНрдордХ рд╣реИрдВ: "рдореИрдВ рдирдлрд░рдд рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ рдирдлрд░рдд рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ рдирдлрд░рдд рдХрд░рддрд╛ рд╣реВрдВ" рдпрд╛ " рдЕрднрд┐рдорд╛рдиреА рдЯрд┐рдкреНрдкрдгреА" рдпрд╛ "рд╡рд╛рд╣, рдореИрдВ рдореБрд╕реАрдмрдд рдореЗрдВ рд╣реВрдВ ред " рдФрд░ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рджреЗрдЦреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдкреНрд░рд╢реНрди рдкреНрд░рд╛рд░реВрдк рд╣реИ: "рдХреНрдпрд╛ рдореИрдВ рд╕реЛрдпрд╛ рдЦрд╛ рд╕рдХрддрд╛ рд╣реВрдВ?", "рдореИрдВ рдкрд╛рдиреА рдХреЛ рдареАрдХ рд╕реЗ рдЕрд╡рд╢реЛрд╖рд┐рдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛?"рдЕрдиреНрдпред

рд╣рдордиреЗ рдПрдХ рд╕рд░рд▓ рдкрд╛рда рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ред рд╕реАрдзреЗ рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП рдПрдХ рдмреНрд░реЗрдХрдбрд╛рдЙрди рдХреЗ рд▓рд┐рдП рдПрд▓рдбреАрдП рдореЙрдбрд▓ рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрд╡рдпрдВ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдкреИрдо рдФрд░ рдЕрд░реНрдерд╣реАрди рд▓рдШреБ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 30 рд╕реЗ рдХрдо рд╢рдмреНрджреЛрдВ рд╡рд╛рд▓реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВред рд╣рдо рдЙрдиреНрд╣реЗрдВ рд▓реЛрдЕрд░рдХреЗрд╕ рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВред

# Let's get rid of text < 30 words
def filter_text_words(text, min_words = 30):
    text = str(text)
    return len(text.split()) > 30
filtered_comments = filtered_comments[filtered_comments['comment'].apply(filter_text_words)]
comments_only = filtered_comments['comment']
comments_only= comments_only.apply(lambda x: x.lower())
comments_only.head()

рд╣рдорд╛рд░реЗ рдкрд╛рда рдЪрдпрди рдХреЛ рдЦрд╛рд▓реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕реНрдЯреЙрдк рд╢рдмреНрдж рд╣рдЯрд╛рдПрдВ

stop_words = stopwords.words('english')
def remove_stop_words(tokens):
    new_tokens = []
    for t in tokens:
        token = []
        for word in t:
            if word not in stop_words:
                token.append(word)
        new_tokens.append(token)
    return new_tokens

tokens = remove_stop_words(data_words)

рд╣рдо рдмрдбрд╝реЗ рд╡рд╛рдХреНрдпрд╛рдВрд╢реЛрдВ рдХреЛ рднреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдерд┐рд░ рд╡рд╛рдХреНрдпрд╛рдВрд╢реЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рдмреНрджреЛрдВ рдХрд╛ рдПрдХ рдмреИрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ рдЧреНрд▓реВрдЯреЗрди_рдлреНрд░реА, рд╕рдкреЛрд░реНрдЯ_рдЧреНрд░реБрдк рдФрд░ рдЕрдиреНрдп рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдЬреЛ рд╕рдореВрд╣рдмрджреНрдз рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрд░реНрде рд░рдЦрддреЗ рд╣реИрдВред


bigram = gensim.models.Phrases(tokens, min_count=5, threshold=100)
bigram_mod = gensim.models.phrases.Phraser(bigram)
bigram_mod.save('bigram_mod.pkl')
bag_of_words = [bigram_mod[w] for w in tokens]
with open('bigrams.pkl', 'wb') as f:
    pickle.dump(bag_of_words, f)

рдЕрдм рд╣рдо рдЕрдВрддрддрдГ рдПрд▓рдбреАрдП рдореЙрдбрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред


id2word = corpora.Dictionary(bag_of_words)
id2word.save('id2word.pkl')
id2word.filter_extremes(no_below=3, no_above=0.4, keep_n=3*10**6)
corpus = [id2word.doc2bow(text) for text in bag_of_words]

lda_model = gensim.models.ldamodel.LdaModel(
    corpus, 
    id2word=id2word, 
    eval_every=20,
    random_state=42,
    num_topics=30, 
    passes=5
    )
lda_model.save('lda_default_2.pkl')
topics = lda_model.show_topics(num_topics=30, num_words=100, formatted=False)

рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрдВрддрддрдГ рдЧрдард┐рдд рд╡рд┐рд╖рдпреЛрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдЬреЛ рдореИрдВрдиреЗ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рд╣реИред

for t in range(lda_model.num_topics):
    plt.figure(figsize=(15, 10))
    plt.imshow(WordCloud(background_color="white", max_words=100, width=900, height=900, collocations=False)
               .fit_words(dict(topics[t][1])))
    plt.axis("off")
    plt.title("Topic #" + themes_headers[t])
    plt.show()

рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╡рд┐рд╖рдп рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реИрдВред рдЙрдирдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧ рд╕реАрд▓рд┐рдПрдХ рдЕрд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореВрд▓ рд░реВрдк рд╕реЗ, рднреЛрдЬрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд░реЗрд╕реНрддрд░рд╛рдВ рдореЗрдВ рдЬрд╛рдирд╛, рд▓рд╕ рдХреЗ рд╕рд╛рде рджреВрд╖рд┐рдд рднреЛрдЬрди, рднрдпрд╛рдирдХ рджрд░реНрдж, рдЙрдкрдЪрд╛рд░, рдбреЙрдХреНрдЯрд░реЛрдВ рдХреЗ рдкрд╛рд╕ рдЬрд╛рдирд╛, рдкрд░рд┐рд╡рд╛рд░, рдЧрд▓рддрдлрд╣рдореА рдФрд░ рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╣рд░ рджрд┐рди рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред

рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рд░реЛрдЪрдХ рдФрд░ рдЙрдкрдпреЛрдЧреА рд▓рдЧреЗрдЧреАред рдФрд░ рдлрд┐рд░ рднреА, рдЪреВрдВрдХрд┐ рдореИрдВ рдПрдХ рдбреАрдПрд╕ рдбреЗрд╡рд▓рдкрд░ рдирд╣реАрдВ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рд╕рдЦреНрддреА рд╕реЗ рдиреНрдпрд╛рдп рди рдХрд░реЗрдВред рдЕрдЧрд░ рдХреБрдЫ рдЬреЛрдбрд╝рдирд╛ рдпрд╛ рд╕реБрдзрд╛рд░рдирд╛ рд╣реИ, рддреЛ рдореИрдВ рд╣рдореЗрд╢рд╛ рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реВрдВ, рд▓рд┐рдЦреЗрдВред

30 рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП

рд╕рд╛рд╡рдзрд╛рдиреА, рдмрд╣реБрдд рд╕рд╛рд░реА рдЫрд╡рд┐рдпрд╛рдВ

All Articles