
рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рднрд╛рд╖рд╛ рдореЗрдВ рдЧреНрд░рдВрдереЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рдирд┐рд░рдВрддрд░ рд╕рд╛рдордпрд┐рдХ рдХрд╛рд░реНрдп рд╣реИ рдЬрд┐рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╕рднреА рдЙрдкрд▓рдмреНрдз рддрд░реАрдХреЛрдВ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдЬ рдореИрдВ рдЬреВрд▓рд┐рдпрд╛ рднрд╛рд╖рд╛ рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдмреЗрд╢рдХ, рднрд╛рд╖рд╛ рдХреЗ рдпреБрд╡рд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдИ рд╡рд┐рдХрд╕рд┐рдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреИрдирдлреЛрд░реНрдб CoreNLP, Apache OpenNLP, GATE, рдЗрддреНрдпрд╛рджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЧрдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЛрдиреЛрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╢рдмреНрдж рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЬреВрд▓рд┐рдпрд╛ рдФрд░ рдЙрд╕рдХреЗ рдЙрдиреНрдирдд рдЧрдгрд┐рддреАрдп рд╕рд╛рдзрдиреЛрдВ рдХреА рд╡рд╛рдХреНрдпрдЧрдд рд╕рд╛рджрдЧреА рдЧреНрд░рдВрдереЛрдВ рдХреЗ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдФрд░ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЦреБрдж рдХреЛ рд╡рд┐рд╕рд░реНрдЬрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддреА рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЬреВрд▓рд┐рдпрд╛ рд╡рд░реНрдб рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЯреВрд▓реНрд╕ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВред рд╣рдо рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд╡рд╕рд░реЛрдВ рдХреА рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕реВрдЪреА рдХреЗ рдмреАрдЪ рд╕рдВрддреБрд▓рди рд░рдЦреЗрдВрдЧреЗ, рдЬреЛ рдПрдирдПрд▓рдкреА рд╡рд┐рд╖рдп рдореЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреВрд▓рд┐рдпрд╛ рдЯреВрд▓ рдФрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдФрд░ рдЖрд╡реЗрджрди рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдирдПрд▓рдкреА (рдкреНрд░рд╛рдХреГрддрд┐рдХ рднрд╛рд╖рд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг) рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдбреБрдмрдХреА рд▓рдЧрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдерд╛ред
рдЦреИрд░, рдЕрдм, рдкреИрдХреЗрдЬ рдЕрд╡рд▓реЛрдХрди рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
TextAnalysis.jl
TextAnalysis.jl рдкреИрдХреЗрдЬ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╛рда рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдиреНрдпреВрдирддрдо рд╕реЗрдЯ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЙрд╕рдХреЗ рд╕рд╛рде рд╣реИ рдЬреЛ рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рд▓рд┐рдП рдЧрдП рд╣реИрдВ ред
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝
рдореВрд▓ рдЗрдХрд╛рдИ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХрд╛рд░ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ:
- FileDocument - рдбрд┐рд╕реНрдХ рдкрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝
julia> pathname = "/usr/share/dict/words" "/usr/share/dict/words" julia> fd = FileDocument(pathname) A FileDocument * Language: Languages.English() * Title: /usr/share/dict/words * Author: Unknown Author * Timestamp: Unknown Time * Snippet: AA's AMD AMD's AOL AOL's Aachen Aachen's Aaliyah
- StringDocument - рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЬреЛ UTF-8 рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ RAM рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред StringDocument рд╕рдВрд░рдЪрдирд╛ рд╕рдВрдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдкрд╛рда рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
julia> str = "To be or not to be..." "To be or not to be..." julia> sd = StringDocument(str) A StringDocument{String} * Language: Languages.English() * Title: Untitled Document * Author: Unknown Author * Timestamp: Unknown Time * Snippet: To be or not to be...
- TokenDocument - рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЬреЛ UTF-8 рдЯреЛрдХрди (рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдП рдЧрдП рд╢рдмреНрджреЛрдВ) рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИред
TokenDocument
рд╕рдВрд░рдЪрдирд╛ рдЯреЛрдХрди рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреВрд░реНрдг рдкрд╛рда рдХреЛ рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд┐рдирд╛ рдмрд╣рд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
julia> my_tokens = String["To", "be", "or", "not", "to", "be..."] 6-element Array{String,1}: "To" "be" "or" "not" "to" "be..." julia> td = TokenDocument(my_tokens) A TokenDocument{String} * Language: Languages.English() * Title: Untitled Document * Author: Unknown Author * Timestamp: Unknown Time * Snippet: ***SAMPLE TEXT NOT AVAILABLE***
- NGramDocument - UTF8 рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ n-рдЧреНрд░рд╛рдо рдХреЗ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝, рдЕрд░реНрдерд╛рддреН
n
UTF-8 рд╡рд░реНрдгреЛрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рдФрд░ рдЙрдирдХреА рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдЙрдВрдЯрд░ред рдХрд┐рд╕реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдП рдЧрдП рдЧреНрд░рдВрдереЛрдВ рдореЗрдВ рднрд╛рд╖рд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдЖрдХрд╛рд░рд┐рдХреА, рднрд╛рд╖рд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╢реБрд▓реНрдХ рдЙрди рддрд░реАрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрд╛рда рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рдХрдореА рд╣реИ рдЬрд╣рд╛рдВ рднрд╛рд╖рд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
julia> my_ngrams = Dict{String, Int}("To" => 1, "be" => 2, "or" => 1, "not" => 1, "to" => 1, "be..." => 1) Dict{String,Int64} with 6 entries: "or" => 1 "be..." => 1 "not" => 1 "to" => 1 "To" => 1 "be" => 2 julia> ngd = NGramDocument(my_ngrams) A NGramDocument{AbstractString} * Language: Languages.English() * Title: Untitled Document * Author: Unknown Author * Timestamp: Unknown Time * Snippet: ***SAMPLE TEXT NOT AVAILABLE***
рдпрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╡рд┐рдХрд▓реНрдк:
julia> str = "To be or not to be..." "To be or not to be..." julia> ngd = NGramDocument(str, 2) NGramDocument{AbstractString}(Dict{AbstractString,Int64}("To be" => 1,"or not" => 1,"be or" => 1,"or" => 1,"not to" => 1,"not" => 1,"to be" => 1,"to" => 1,"To" => 1,"be" => 2тАж), 2, TextAnalysis.DocumentMetadata( Languages.English(), "Untitled Document", "Unknown Author", "Unknown Time"))
рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рднреА рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдЙрдЪрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдвреВрдВрдвреЗрдЧрд╛ред
julia> Document("To be or not to be...") A StringDocument{String} * Language: Languages.English() * Title: Untitled Document * Author: Unknown Author * Timestamp: Unknown Time * Snippet: To be or not to be... julia> Document("/usr/share/dict/words") A FileDocument * Language: Languages.English() * Title: /usr/share/dict/words * Author: Unknown Author * Timestamp: Unknown Time * Snippet: AA's AMD AMD's AOL AOL's Aachen Aachen's Aaliyah julia> Document(String["To", "be", "or", "not", "to", "be..."]) A TokenDocument{String} * Language: Languages.English() * Title: Untitled Document * Author: Unknown Author * Timestamp: Unknown Time * Snippet: ***SAMPLE TEXT NOT AVAILABLE*** julia> Document(Dict{String, Int}("a" => 1, "b" => 3)) A NGramDocument{AbstractString} * Language: Languages.English() * Title: Untitled Document * Author: Unknown Author * Timestamp: Unknown Time * Snippet: ***SAMPLE TEXT NOT AVAILABLE***
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдкрд╛рда / рдЯреЛрдХрди рдФрд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ text(...)
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
julia> td = TokenDocument("To be or not to be...") TokenDocument{String}(["To", "be", "or", "not", "to", "be"], TextAnalysis.DocumentMetadata( Languages.English(), "Untitled Document", "Unknown Author", "Unknown Time")) julia> text(td) тФМ Warning: TokenDocument's can only approximate the original text тФФ @ TextAnalysis ~/.julia/packages/TextAnalysis/pcFQf/src/document.jl:111 "To be or not to be" julia> tokens(td) 6-element Array{String,1}: "To" "be" "or" "not" "to" "be"
рдЙрджрд╛рд╣рд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд╛рд░реНрд╕ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреЙрд▓ рдЯреВ text(td)
рдиреЗ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА рдереА рдХрд┐ рдЯреЗрдХреНрд╕реНрдЯ рдХреЗрд╡рд▓ рд▓рдЧрднрдЧ рдмрд╣рд╛рд▓ рд╣реЛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ TokenDocument
рд╢рдмреНрдж рд╕реАрдорд╛рдВрдХрдХ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред tokens(td)
рдХреА рдХреЙрд▓ рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдП рдЧрдП рд╢рдмреНрджреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджрд┐рдпрд╛ред
рдЖрдк рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
julia> StringDocument("This document has too foo words") A StringDocument{String} * Language: Languages.English() * Title: Untitled Document * Author: Unknown Author * Timestamp: Unknown Time * Snippet: This document has too foo words julia> language(sd) Languages.English() julia> title(sd) "Untitled Document" julia> author(sd) "Unknown Author" julia> timestamp(sd) "Unknown Time"
рдФрд░ рдЙрди рд╕рднреА рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рд╕рдВрд╢реЛрдзрди рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪрдирд╛ рд░реВрдмреА рднрд╛рд╖рд╛ рдореЗрдВ рд╣реА рд╣реИред рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдПрдХ рдкреНрд░рддреНрдпрдп рд╣реИ !
:
julia> using TextAnalysis.Languages julia> language!(sd, Languages.Russian()) Languages.Russian () julia> title!(sd, "") "" julia> author!(sd, " ..") " .." julia> import Dates:now julia> timestamp!(sd, string(now())) "2019-11-09T22:53:38.383"
UTF-8 рдХреЗ рд╕рд╛рде рддрд╛рд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
рдЬреВрд▓рд┐рдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп UTF-8 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдЧреИрд░-рд▓реИрдЯрд┐рди рдЕрдХреНрд╖рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдХрд┐рд╕реА рднреА рдЪрд░рд┐рддреНрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╡рд┐рдХрд▓реНрдк рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкрдВрдХреНрддрд┐ рдЕрдиреБрдХреНрд░рдо рдмрд╛рдЗрдЯреНрд╕ рд╣реИрдВ, рд╡рд░реНрдг рдирд╣реАрдВред рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рд┐рддреНрд░ рдХреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рдЕрд▓рдЧ рд╕рдВрдЦреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ UNICODE рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╣реИрдВред рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдХреЛрдб-рдПрдВрдб-рдпреВрдЯреАрдПрдл -8 рджреЗрдЦреЗрдВред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЪрд▓реЛ рдЧрдгрд┐рддреАрдп UNICODE рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд░реЗрдЦрд╛ рд╕реЗрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ x рдФрд░ y рд╕реЗ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
julia> s = "\u2200 x \u2203 y" "тИА x тИГ y" julia> length(s)
рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдкрд░:
julia> s[1] 'тИА': Unicode U+2200 (category Sm: Symbol, math) julia> s[2] ERROR: StringIndexError("тИА x тИГ y", 2) [...] julia> s[3] ERROR: StringIndexError("тИА x тИГ y", 3) Stacktrace: [...] julia> s[4] ' ': ASCII/Unicode U+0020 (category Zs: Separator, space)
рдЙрджрд╛рд╣рд░рдг рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реВрдЪрдХрд╛рдВрдХ 1
рдиреЗ рд╣рдореЗрдВ рдкреНрд░рддреАрдХ index рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рд╣реИред рд▓реЗрдХрд┐рди рдмрд╛рдж рдХреЗ рд╕рднреА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдореЗрдВ 3 рд╕рдорд╛рд╡реЗрд╢реА, рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗред рдФрд░ рдХреЗрд╡рд▓ 4 рд╡реЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ рдиреЗ рдПрдХ рд╕реНрдерд╛рди рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд┐рдпрд╛, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЕрдЧрд▓реЗ рдЪрд░рд┐рддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгреЛрдВ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рд╣реИрдВ (рдкрд┐рдЫрд▓реЗ рд╕реВрдЪрдХрд╛рдВрдХ), nextind
(рдЕрдЧрд▓рд╛ рд╕реВрдЪрдХрд╛рдВрдХ) рдФрд░ thisind
(рдпрд╣ рд╕реВрдЪрдХрд╛рдВрдХ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдКрдкрд░ рдкрд╛рдП рдЧрдП рдЕрдВрддрд░ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреВрдЫрддреЗ рд╣реИрдВ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреА рд╕реАрдорд╛ рдХрд╣рд╛рдВ рд╣реИ:
julia> prevind(s, 4) 1
рд╣рдореЗрдВ рдкреНрд░рддреАрдХ 1 рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ 1 рдорд┐рд▓рд╛ред
julia> thisind(s, 3) 1
рдЗрдВрдбреЗрдХреНрд╕ 3 рдХреА рдЬрд╛рдБрдЪ рдХреА рдФрд░ рд╡рд╣реА рдорд╛рдиреНрдп 1 рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред
рдпрджрд┐ рд╣рдореЗрдВ рд╕рднреА рдкрд╛рддреНрд░реЛрдВ рдХреЛ "рдЦрддреНрдо" рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо рджреЛ рд╕рд░рд▓ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
1) рдбрд┐рдЬрд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░:
julia> for c in s print(c) end тИА x тИГ y
2) eachindex
enumerator рдХрд╛ рдЙрдкрдпреЛрдЧ eachindex
:
julia> collect(eachindex(s)) 7-element Array{Int64,1}: 1 4 5 6 7 10 11 julia> for i in eachindex(s) print(s[i]) end тИА x тИГ y
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ
рдпрджрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдкрд╛рда рдХреБрдЫ рдмрд╛рд╣рд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдпрд╣ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдмрд╛рдЗрдЯ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, remove_corrupt_utf8!(sd)
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рддрд░реНрдХ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реИрдВред
TextAnalysis рдкреИрдХреЗрдЬ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдХрд╛рд░реНрдп prepare!(...)
ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рда рд╕реЗ рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрди рд╣рдЯрд╛ рджреЗрдВ:
julia> str = StringDocument("here are some punctuations !!!...") julia> prepare!(str, strip_punctuation) julia> text(str) "here are some punctuations "
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд░реНрдб рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧреА рдХрджрдо рд▓реЛрдЕрд░ рдХреЗрд╕ рдореЗрдВ рд╕рднреА рдЕрдХреНрд╖рд░реЛрдВ рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╢рдмреНрджреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рдкрд╛рда рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рдЦреЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рддрдереНрдп рдХрд┐ рд╢рдмреНрдж рдПрдХ рдЙрдЪрд┐рдд рдирд╛рдо рд╣реИ рдпрд╛ рд╢рдмреНрдж рдПрдХ рд╡рд╛рдХреНрдп рдХреА рд╕реАрдорд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдЖрдЧреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдореЙрдбрд▓ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд▓реЛрдЕрд░рдХреЗрд╕ рдХреЛ remove_case!()
рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ remove_case!()
рдлрд╝рдВрдХреНрд╢рдиред
julia> sd = StringDocument("Lear is mad") A StringDocument{String} julia> remove_case!(sd) julia> text(sd) "lear is mad"
рд░рд╛рд╕реНрддреЗ рдХреЗ рд╕рд╛рде, рд╣рдо рдХрдЪрд░рд╛ рд╢рдмреНрджреЛрдВ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рдЬреЛ рдореИрдЪреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдирд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдХреЛрдИ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ remove_words!(тАж)
рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдЗрди рд╕реНрдЯреЙрдк рд╢рдмреНрджреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
julia> remove_words!(sd, ["lear"]) julia> text(sd) " is mad"
рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд▓реЗрдЦ, рдкреНрд░рд╕реНрддрд╛рд╡, рд╕рд░реНрд╡рдирд╛рдо, рд╕рдВрдЦреНрдпрд╛рдПрдВ рднреА рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рд╢рдмреНрджреЛрдВ рдХреЛ рд░реЛрдХрдирд╛ рд╣реИ, рдЬреЛ рдШрдЯрдирд╛ рдХреА рдЖрд╡реГрддреНрддрд┐ рдореЗрдВ рдкрд░рдЬреАрд╡реА рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП, рдпреЗ рд╢рдмреНрджрдХреЛрд╢ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╣реИрдВред рдФрд░ рд╡реЗ Language.jl рдкреИрдХреЗрдЬ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВред рд╕рдВрдЦреНрдпрд╛рдПрдВ рд╣рдореЗрдВ рдкрд░реЗрд╢рд╛рди рдХрд░рддреА рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рднрд╡рд┐рд╖реНрдп рдХреЗ рдореЙрдбрд▓ рдореЗрдВ рдПрдХ рдерд░реНрдорд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝, рд╡реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЖрдпрд╛рдо рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рдмрд╣реБрдд рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреНрд░рдВрдереЛрдВ рдХреА рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЦреЛрдЬ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдЙрдкрд▓рдмреНрдз рд╕рдлрд╛рдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
prepare!(sd, strip_articles)
prepare!(sd, strip_indefinite_articles)
prepare!(sd, strip_definite_articles)
prepare!(sd, strip_preposition)
prepare!(sd, strip_pronouns)
prepare!(sd, strip_stopwords)
prepare!(sd, strip_numbers)
prepare!(sd, strip_non_letters)
prepare!(sd, strip_spares_terms)
prepare!(sd, strip_frequent_terms)
prepare!(sd, strip_html_tags)
рд╡рд┐рдХрд▓реНрдк рд╕рдВрдпреБрдХреНрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, prepare!
рдХрд░рдиреЗ рдХреЗ prepare!
рдПрдХ рдХреЙрд▓ рдореЗрдВ prepare!
рдПрдХ рд╕рд╛рде рд▓реЗрдЦ, рд╕рдВрдЦреНрдпрд╛ рдФрд░ html рдЯреИрдЧ рд╣рдЯрд╛рдПрдВ - prepare!(sd, strip_articles| strip_numbers| strip_html_tags)
рдПрдХ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╢рдмреНрджреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдЕрдВрдд рдФрд░ рдкреНрд░рддреНрдпрдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢рдмреНрдж рд░реВрдкреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рд╕реНрддреБрддрд┐ рдореЙрдбрд▓ рдХреА рдирд╛рдЯрдХреАрдпрддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рднрд╛рд╖рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд░реНрд╢рд╛рдИ рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рд░реВрд╕реА рдореЗрдВ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрджрд╛рд╣рд░рдг:
julia> sd = StringDocument(" ") StringDocument{String}(" ", TextAnalysis.DocumentMetadata(Languages.English(), "Untitled Document", "Unknown Author", "Unknown Time")) julia> language!(sd, Languages.Russian()) Languages.Russian() julia> stem!(sd) julia> text(sd) " "
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд┐рдХрд╛рдп
рдХреЙрд░реНрдкрд╕ рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЙрд╕реА рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред TextAnalysis рдкреИрдХреЗрдЬ рдПрдХ рд╢рдмреНрдж рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЧрдарди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рддреБрд░рдВрдд рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕реЗрдЯ рдЪрд╛рд╣рд┐рдПред рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ:
D1 = "I like databases"
D2 = "I hate databases"
рдпрд╣ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
рд╕реНрддрдВрднреЛрдВ рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд╢рдмреНрджреЛрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (рдпрд╛ рдЕрдиреБрдХреНрд░рдорд┐рдд) рд╣реЛрддреЗ рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╢рдмреНрдж (рд╢рдмреНрдж) рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╕реЗрд▓ 0 рд╣реЛрдЧрд╛ред рдФрд░ 1 рдЕрдЧрд░ рдпрд╣ рдХрд┐рд╕реА рднреА рд╕рдордп рд╣реЛрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдореЙрдбрд▓ рдШрдЯрдирд╛ рдХреА рдЖрд╡реГрддреНрддрд┐ (рдЯреАрдПрдл рдореЙрдбрд▓) рдФрд░ рдкреВрд░реЗ рд╢рд░реАрд░ (рдЯреАрдПрдл-рдЖрдИрдбреАрдПрдл) рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдорд╣рддреНрд╡ рджреЛрдиреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред
рд╣рдо Corpus()
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢рд░реАрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
crps = Corpus([StringDocument("Document 1"), StringDocument("Document 2")])
рдпрджрд┐ рд╣рдо рддреБрд░рдВрдд рд╢рд░реНрддреЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рдорд┐рд▓рддрд╛ рд╣реИ:
julia> lexicon(crps) Dict{String,Int64} with 0 entries
рдФрд░, рдпрд╣рд╛рдБ, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ update_lexicon!(crps)
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд╢рдмреНрджреЛрдВ рдХреЛ update_lexicon!(crps)
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ update_lexicon!(crps)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ update_lexicon!(crps)
, рд╣рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ:
julia> update_lexicon!(crps) julia> lexicon(crps) Dict{String,Int64} with 3 entries: "1" => 1 "2" => 1 "Document" => 2
рдЕрд░реНрдерд╛рддреН, рд╣рдо рдЪрдпрдирд┐рдд рдирд┐рдХрд╛рдп (рд╢рдмреНрдж рдФрд░ рд╕рдВрдЦреНрдпрд╛) рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд┐рдХрд╛рдп рдореЗрдВ рдЙрдирдХреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрд╕реА рд╕рдордп, рд╣рдо рд╢рдмреНрдж рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рджрд╕реНрддрд╛рд╡реЗрдЬрд╝":
julia> lexical_frequency(crps, "Document") 0.5
рд╕рд╛рде рд╣реА, рд╣рдо рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП, рдорд╛рдорд▓реЗ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдЗрд╕ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реВрдЪрдирд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдЖрдкрдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд╣рд╛рдВ рд╡реЗ рд╢рд░реНрддреЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рдкреНрд░рдХрдЯ рд╣реЛрддреЗ рд╣реИрдВ:
julia> update_inverse_index!(crps) julia> inverse_index(crps) Dict{String,Array{Int64,1}} with 3 entries: "1" => [1] "2" => [2] "Document" => [1, 2]
рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдПред prepare!
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ prepare!
рдкрд╣рд▓реЗ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ, рдкрд╣рд▓рд╛ рддрд░реНрдХ рдорд╛рдорд▓рд╛ рд╣реИред
julia> crps = Corpus([StringDocument("Document ..!!"), StringDocument("Document ..!!")]) julia> prepare!(crps, strip_punctuation) julia> text(crps[1]) "Document " julia> text(crps[2]) "Document "
рд╡реНрдпрдХреНрддрд┐рдЧрдд рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдкреВрд░реЗ рд╢рд░реАрд░ рдХреЗ рд▓рд┐рдП рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
julia> crps = Corpus([StringDocument("Name Foo"), StringDocument("Name Bar")]) julia> languages(crps) 2-element Array{Languages.English,1}: Languages.English() Languages.English() julia> titles(crps) 2-element Array{String,1}: "Untitled Document" "Untitled Document" julia> authors(crps) 2-element Array{String,1}: "Unknown Author" "Unknown Author" julia> timestamps(crps) 2-element Array{String,1}: "Unknown Time" "Unknown Time"
рдЖрдк рдПрдХ рдмрд╛рд░ рдореЗрдВ рдкреВрд░реЗ рд╢рд░реАрд░ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдорд╛рди рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рд▓рд┐рдП рддрддреНрд╡-рджрд░-рддрддреНрд╡ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдкрд╛рд╕ рдХрд░рдХреЗред
julia> languages!(crps, Languages.German()) julia> titles!(crps, "") julia> authors!(crps, "Me") julia> timestamps!(crps, "Now") julia> languages!(crps, [Languages.German(), Languages.English julia> titles!(crps, ["", "Untitled"]) julia> authors!(crps, ["Ich", "You"]) julia> timestamps!(crps, ["Unbekannt", "2018"])
рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рд╕реБрд╡рд┐рдзрд╛
рдлрд╝реАрдЪрд░ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдорд╢реАрди рд╕реАрдЦрдиреЗ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдпрд╣ рд╕реАрдзреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд╡рд┐рд╖рдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди TextAnalysis рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдЦрдВрдб рдЗрд╕ рдмрд╣реБрдд рд╣реА рд╕реВрддреНрд░реАрдХрд░рдг рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИред рдЗрд╕ рдЦрдВрдб рдореЗрдВ рджреЛрдиреЛрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рд╢рдмреНрдж-рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдФрд░ рдХрдИ рдЕрдиреНрдп рддрд░реАрдХреЗред https://juliatext.imtqy.com/TextAnalysis.jl/dev/features/
рд╣рдо рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдореЙрдбрд▓ рдПрдХ рдореЙрдбрд▓ рд╣реИ рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╢рдмреНрджреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдирдХреА рд╕реНрдерд┐рддрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдХ рдЕрдВрдЧреНрд░реЗрдЬреА рднрд╛рд╖рд╛ рдХреЗ рд▓реЗрдЦрдХ рдореЗрдВ, рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╢рдмреНрджреЛрдВ рдХрд╛ рдмреИрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЗрд╕рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рддрдереНрдп, рдШрдЯрдирд╛ рдХреА рдЖрд╡реГрддреНрддрд┐ (TF - рдЯрд░реНрдо рдлрд╝реНрд░реАрдХреНрд╡реЗрдВрд╕реА) рдпрд╛ рдПрдХ рдореЙрдбрд▓ рдЬреЛ рдкреВрд░реЗ рд╢рд░реАрд░ рдореЗрдВ рдЯрд░реНрдо рдХреА рдШрдЯрдирд╛ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ (TF-IDF - рдЯрд░реНрдо рдлрд╝реНрд░реАрдХреНрд╡реЗрдВрд╕реА - рд╡реНрдпреБрддреНрдХреНрд░рдо рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЖрд╡реГрддреНрддрд┐) рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рддреАрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдВ, рдЬрд┐рдирдореЗрдВ Document
, 1
, 2
, 3
ред
julia> using TextAnalysis julia> crps = Corpus([StringDocument("Document 1"), StringDocument("Document 2"), StringDocument("Document 1 3")])
рд╣рдо рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рд╣рдо рдкреВрд░реНрдг рд▓рдХреНрд╕рд┐рдХреЙрди рдФрд░ рдЯрд░реНрдо рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗ:
julia> update_lexicon!(crps) julia> m = DocumentTermMatrix(crps) DocumentTermMatrix( [1, 1] = 1 [3, 1] = 1 [2, 2] = 1 [3, 3] = 1 [1, 4] = 1 [2, 4] = 1 [3, 4] = 1, ["1", "2", "3", "Document"], Dict("1" => 1,"2" => 2,"Document" => 4,"3" => 3))
рд╡реЗрд░рд┐рдПрдмрд▓ m
рдореЗрдВ рдЯрд╛рдЗрдк DocumentTermMatrix
рдХрд╛ рдорд╛рди рд╣реИред рдореБрджреНрд░рд┐рдд рдкрд░рд┐рдгрд╛рдо рдореЗрдВ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдпрд╛рдо 4 рд╢рд░реНрддреЛрдВ рдореЗрдВ 3 рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ Document
рдФрд░ рдирдВрдмрд░ 1
, 2
, 3
рд╢рдмреНрдж рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдореЙрдбрд▓ рдХреЗ рдЖрдЧреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ dtm()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
julia> dtm(m) 3├Ч4 SparseArrays.SparseMatrixCSC{Int64,Int64} with 7 stored entries: [1, 1] = 1 [3, 1] = 1 [2, 2] = 1 [3, 3] = 1 [1, 4] = 1 [2, 4] = 1 [3, 4] = 1
рдпрд╣ рд╡рд┐рдХрд▓реНрдк SparseMatrixCSC
рдкреНрд░рдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдмрд╣реБрдд рд╣реА рд╡рд┐рд░рд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдореЗрдВ рдХрд┐рдлрд╛рдпрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реА рд╣реИрдВ рдЬреЛ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рд╢рдмреНрдж рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЖрдХрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╕рдВрд╕рд╛рдзрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд╢рдмреНрджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрд╣реБрдд рдЬрд▓реНрджреА рдмрдврд╝рддреА рд╣реИред рдпрджрд┐ рдЖрдк рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЛ рдкреВрд░реНрд╡-рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдХреЗ рд╕рднреА рд╢рдмреНрдж рд░реВрдкреЛрдВ, рд╕рдВрдЦреНрдпрд╛рдУрдВ, рддрд┐рдерд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ рд╕рднреА рд╢рдмреНрдж рдЗрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдЖ рдЬрд╛рдПрдВрдЧреЗред рднрд▓реЗ рд╣реА рдореБрдЦреНрдп рд░реВрдк рдореЗрдВ рдХрдореА рдХреЗ рдХрд╛рд░рдг рд╢рдмреНрдж рд░реВрдкреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рд╣реЛ, рд╢реЗрд╖ рддрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣рдЬрд╛рд░реЛрдВ - рджрд╕рд┐рдпреЛрдВ рд╣рдЬрд╛рд░реЛрдВ рдХреЗ рдХреНрд░рдо рдХреА рд╣реЛрдЧреАред рдЕрд░реНрдерд╛рддреН, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдкреВрд░реНрдг рдЖрдпрд╛рдо рдЗрд╕ рдорд╛рддреНрд░рд╛ рдХреЗ рдХреБрд▓ рдЙрддреНрдкрд╛рдж рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдкреВрд░реНрдг рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рди рдХреЗрд╡рд▓ рдЗрдХрд╛рдЗрдпреЛрдВ рдмрд▓реНрдХрд┐ рдЬреАрд░реЛ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ SparseMatrixCSC
рддреБрд▓рдирд╛ рдореЗрдВ SparseMatrixCSC
рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЖрдк рдЗрд╕реЗ рдПрдХ рдЕрдиреНрдп рд╡рд┐рдзрд┐ dtm(..., :dense)
рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ collect()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд░рд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдкреВрд░реНрдг рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
julia> dtm(m, :dense) 3├Ч4 Array{Int64,2}: 1 0 0 1 0 1 0 1 1 0 1 1
рдпрджрд┐ рдЖрдк рд╢рдмреНрджреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рдореВрд▓ рд╕рдВрд░рдЪрдирд╛ (рд╢рдмреНрджреЛрдВ рдХреЗ рдореВрд▓ рдХреНрд░рдо рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЛ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИред
julia> m.terms 4-element Array{String,1}: "1" "2" "3" "Document"
рдЖрд╡реГрддреНрддрд┐ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ tf()
рдФрд░ tf_idf()
рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
julia> tf(m) |> collect 3├Ч4 Array{Float64,2}: 0.5 0.0 0.0 0.5 0.0 0.5 0.0 0.5 0.333333 0.0 0.333333 0.333333
рдкреНрд░рддреНрдпреЗрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╢рдмреНрджреЛрдВ рдХреЗ рдорд╣рддреНрд╡ рдХреЛ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдкрд╣рд▓реЗ рджреЛ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдореЗрдВ рджреЛ рд╢рдмреНрдж рд╣реЛрддреЗ рд╣реИрдВред рдЖрдЦрд┐рд░реА рддреАрди рд╣реИрдВред рддреЛ рдЙрдирдХрд╛ рд╡рдЬрди рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдФрд░ TF-IDF рдФрд░ tf_idf()
рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП:
julia> tdm = tf_idf(m) |> collect 3├Ч4 Array{Float64,2}: 0.202733 0.0 0.0 0.0 0.0 0.549306 0.0 0.0 0.135155 0.0 0.366204 0.0
рдФрд░ рдЗрд╕ рдореЙрдбрд▓ рдореЗрдВ рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рд╢рдмреНрдж Document
, рдЬреЛ рд╕рднреА рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд╛ рдореВрд▓реНрдп 0. рд╣реИред рддреАрд╕рд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╢рдмреНрдж 3
рдореЗрдВ рдПрдХ рд╣реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ 1
рд╕реЗ рдЕрдзрд┐рдХ рд╡рдЬрди рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ 1
рднреА рдкрд╣рд▓реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред ред
рдкрд░рд┐рдгрд╛рдореА рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдкреИрдХреЗрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣рдо рд╕рд░рд▓рддрдо k- рд╕рд╛рдзрди рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рд╕рдореВрд╣реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рдо рдЕрдкрдиреЗ рддреАрди рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЛ рджреЛ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВред kmeans
рд▓рд┐рдП рдЗрдирдкреБрдЯ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрдХ рдлреАрдЪрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИ, рдЬрд╣рд╛рдВ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИрдВ рдФрд░ рдХреЙрд▓рдо рдкреИрдЯрд░реНрди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдКрдкрд░ рдкреНрд░рд╛рдкреНрдд рдореЗрдЯреНрд░реЛрдкрд┐рд╕ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
julia> using Clustering julia> R = kmeans(tdm', 2; maxiter=200, display=:iter) Iters objv objv-change | affected ------------------------------------------------------------- 0 1.386722e-01 1 6.933608e-02 -6.933608e-02 | 0 2 6.933608e-02 0.000000e+00 | 0 K-means converged with 2 iterations (objv = 0.06933608051588186) KmeansResult{Array{Float64,2},Float64,Int64}( [0.0 0.16894379504506848; 0.5493061443340549 0.0; 0.0 0.1831020481113516; 0.0 0.0], [2, 1, 2], [0.03466804025794093, 0.0, 0.03466804025794093], [1, 2], [1, 2], 0.06933608051588186, 2, true) julia> c = counts(R)
рдирддреАрдЬрддрди, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓реЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реЛрддрд╛ рд╣реИ, рдХреНрд▓рд╕реНрдЯрд░ рдирдВрдмрд░ 2 рдореЗрдВ рджреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, R.centers
рд╕рдореВрд╣реЛрдВ рдХреЗ рдХреЗрдВрджреНрд░ рд╡рд╛рд▓реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓рд╛ рдХреЙрд▓рдо рд╢рдмреНрдж 2
рд╕реЗ "рдЖрдХрд░реНрд╖рд┐рдд" рд╣реИред рджреВрд╕рд░рд╛ рдХреЙрд▓рдо 1
рдФрд░ 3
рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред
Clustering.jl
рдкреИрдХреЗрдЬ рдореЗрдВ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ: K- рд╕рд╛рдзрди, K-medoids, Affinity Propagation, рдШрдирддреНрд╡-рдЖрдзрд╛рд░рд┐рдд рд╕реНрдерд╛рдирд┐рдХ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдСрдлрд╝ рд╢реЛрд░ (DBSCAN), рдорд╛рд░реНрдХреЛрд╡ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдердо (MCL), рдлрд╝рдЬрд╝реА рд╕реА-рдореАрдиреНрд╕ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ,ред рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ (рдПрдХрд▓, рдФрд╕рдд, рдкреВрд░реНрдг, рд╡рд╛рд░реНрдб рдХрд╛ рд╕рдВрдмрдВрдз)ред рд▓реЗрдХрд┐рди рдЙрдирдХреА рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИред
TextAnalysis.jl
рдкреИрдХреЗрдЬ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдХреНрд░рд┐рдп рд╡рд┐рдХрд╛рд╕ рдХреЗ рддрд╣рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдХрд╛рд░реНрдп рдХреЗрд╡рд▓ рдЧрд┐рдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рд╕реАрдзреЗ рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗред рдпрд╣ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рд▓рд╛рд╣ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ:
julia> ] (v1.2) pkg> add https://github.com/JuliaText/TextAnalysis.jl
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдкрдХреЛ рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЙрди рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
рд╕реБрдзрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ Okapi BM25 рд░реИрдВрдХрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред рдкрд┐рдЫрд▓реЗ tf
рдореЙрдбрд▓ рдХреЗ рд╕рдорд╛рдиред tf_idf
, рд╣рдо bm_25(m)
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдореА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд┐рдЫрд▓реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИред
рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреНрд░рдВрдереЛрдВ рдХреА рдЯреЙрдиреНрд╕рд┐рд▓рд┐рдЯреА рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
model = SentimentAnalyzer(doc) model = SentimentAnalyzer(doc, handle_unknown)
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, doc
рдЙрдкрд░реЛрдХреНрдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред handle_unknown
- рдЕрдЬреНрдЮрд╛рдд рд╢рдмреНрджреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рдиред TonDB рд╡рд┐рд╢реНрд▓реЗрд╖рдг IMDB рдкреИрдХреЗрдЬ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ Flux.jl рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ 0 рд╕реЗ 1 рдХреЗ рд░реЗрдВрдЬ рдореЗрдВ рд╣реИред
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреЛ summarize(d, ns)
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рддрд░реНрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реИред рджреВрд╕рд░рд╛ рд╣реИ ns=
рдЕрдВрдд рдореЗрдВ рд╡рд╛рдХреНрдпреЛрдВ ns=
рд╕рдВрдЦреНрдпрд╛ред
julia> s = StringDocument("Assume this Short Document as an example. Assume this as an example summarizer. This has too foo sentences.") julia> summarize(s, ns=2) 2-element Array{SubString{String},1}: "Assume this Short Document as an example." "This has too foo sentences."
рдХрд┐рд╕реА рднреА рдкрд╛рда рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдПрдХ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдШрдЯрдХ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рдкрд╛рд░реНрд╕рд░ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдзреАрди рд╣реИ, рдЬреЛ рднрд╛рд╖рдг рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИ - рдкреАрдУрдПрд╕ (рднрд╛рд╖рдг рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛)ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рднрд╛рд╖рдг рдЯреИрдЧрд┐рдВрдЧ рдХреЗ рднрд╛рдЧ рджреЗрдЦреЗрдВ ред
ред Tagging
рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕реНрд░реЛрдд рдкрд╛рда рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдХреЗ рд▓рд┐рдП, рдПрдХ рдЯреИрдЧ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рднрд╛рд╖рдг рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдзреАрди рд╣реИрдВред рдкрд╣рд▓рд╛ рд╣реИ рдПрд╡рд░реЗрдЬ рдкрд░рд╕реЗрдкреНрдЯреНрд░реЛрди рдПрд▓реНрдЧреЛрд░рд┐рдердоред рджреВрд╕рд░рд╛ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ LSTM, CNN рдФрд░ CRF рдкрджреНрдзрддрд┐ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ рд╡рд╛рдХреНрдп рдорд╛рд░реНрдХрдЕрдк рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
julia> pos = PoSTagger() julia> sentence = "This package is maintained by John Doe." "This package is maintained by John Doe." julia> tags = pos(sentence) 8-element Array{String,1}: "DT" "NN" "VBZ" "VBN" "IN" "NNP" "NNP" "."
рднрд╛рд╖рдг рдХреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд░реНрде рдХреЗ рднрд╛рдЧ рдХреА рд╕реВрдЪреА рдкреЗрди рдЯреНрд░реАрдмреИрдВрдХ рд╕реЗ рд▓реА рдЧрдИ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, DT - рдирд┐рд░реНрдзрд╛рд░рдХ, NN - рд╕рдВрдЬреНрдЮрд╛, рдПрдХрд╡рдЪрди рдпрд╛ рджреНрд░рд╡реНрдпрдорд╛рди, VBZ - Verb, рддреАрд╕рд░рд╛ рд╡реНрдпрдХреНрддрд┐ рдПрдХрд╡рдЪрди рд╡рд░реНрддрдорд╛рди, Verb, рднреВрддрдХрд╛рд▓рд┐рдХ рдХреГрджрдВрдд, IN - рдкреВрд░реНрд╡рд╕рд░реНрдЧ рдпрд╛ рдЕрдзреАрдирддрд╛ рд╕рдВрдпреБрдЧреНрдорди, NNP - рд╡реНрдпрдХреНрддрд┐рд╡рд╛рдЪрдХ рд╕рдВрдЬреНрдЮрд╛, рдПрдХрд╡рдЪрдиред
рдЗрд╕ рдорд╛рд░реНрдХрдЕрдк рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЖрдпрд╛рдо рдШрдЯрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ
рдЯреЗрдХреНрд╕реНрдЯрдЕрдирд▓рд┐рд╕рд┐рд╕ рдЖрд╢реНрд░рд┐рдд рд╢рд░реНрддреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рдЖрдпрд╛рдореАрддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрд╡реНрдпрдХреНрдд рдЕрд░реНрде рд╡рд┐рд╢реНрд▓реЗрд╖рдг - рдПрд▓рдПрд╕рдП рдФрд░ рдЕрд╡реНрдпрдХреНрдд рдбрд┐рд░рд┐рдЪрд▓реЗрдЯ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ - рдПрд▓рдбреАрдПред
рдПрд▓рдПрд╕рдП рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдЯрд░реНрдо-рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдореИрдЯреНрд░рд┐рдХреНрд╕ (TF-IDF рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЛ 3 рдореЗрдЯреНрд░рд┐рд╕реЗрд╕ рдореЗрдВ рдЕрдкрдШрдЯрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрддреНрдкрд╛рдж рд▓рдЧрднрдЧ рдореВрд▓ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
julia> crps = Corpus([StringDocument("this is a string document"), TokenDocument("this is a token document")]) julia> update_lexicon!(crps) julia> m = DocumentTermMatrix(crps) julia> tf_idf(m) |> collect 2├Ч6 Array{Float64,2}: 0.0 0.0 0.0 0.138629 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.138629 julia> F2 = lsa(m) SVD{Float64,Float64,Array{Float64,2}}([1.0 0.0; 0.0 1.0], [0.138629, 0.138629], [0.0 0.0 тАж 0.0 0.0; 0.0 0.0 тАж 0.0 1.0])
, -, TF-IDF . SVD, , .
LDA . рдПрдХ рдЙрджрд╛рд╣рд░рдг:
julia> crps = Corpus([StringDocument("This is the Foo Bar Document"), StringDocument("This document has too Foo words")]) julia> update_lexicon!(crps) julia> m = DocumentTermMatrix(crps) julia> k = 2
k
lda
, . ╧Х
╬╕
, ntopics ├Ч nwords
, тАФ ntopics ├Ч ndocs
.
тАФ . . , . NaiveBayesClassifier()
. тАФ fit!()
:
using TextAnalysis: NaiveBayesClassifier, fit!, predict m = NaiveBayesClassifier([:legal, :financial]) fit!(m, "this is financial doc", :financial) fit!(m, "this is legal doc", :legal)
predict
:
julia> predict(m, "this should be predicted as a legal document") Dict{Symbol,Float64} with 2 entries: :legal => 0.666667 :financial => 0.333333
, , :legal
.
TextAnalysis.jl . , . MLJ.jl . AdaBoostClassifier, BaggingClassifier, BernoulliNBClassifier, ComplementNBClassifier, ConstantClassifier, XGBoostClassifier, DecisionTreeClassifier. - LSA, . .
TextAnalysis.jl CRF тАФ Conditional Random Fields , Flux.jl, . .
TextAnalysis.jl тАФ NER . NERTagger()
:
:
julia> sentence = "This package is maintained by John Doe." "This package is maintained by John Doe." julia> tags = ner(sentence) 8-element Array{String,1}: "O" "O" "O" "O" "O" "PER" "PER" "O"
NERTagger
TextAnalysis. .
StringDistances.jl
. , , . . , StringDistances.jl . :
using StringDistances compare("martha", "martha", Hamming())
compare
тАФ . , 1 тАФ . 0 тАФ .
, Jaro-Winkler. , . RatcliffObershelp, , . , . .
compare("mariners vs angels", "angels vs mariners", RatcliffObershelp())
, , . , TokenSort , . Julia тАФ Julia, .
WordTokenizers.jl
WordTokenizers.jl . , , TextAnalysis.jl.
тАФ . , tokenize(text)
.
julia> using WordTokenizers julia> text = "I cannot stand when they say \"Enough is enough.\""; julia> tokenize(text) |> print
WordTokenizers .
julia> text = "The leatherback sea turtle is the largest, measuring six or seven feet (2 m) in length at maturity, and three to five feet (1 to 1.5 m) in width, weighing up to 2000 pounds (about 900 kg). Most other species are smaller, being two to four feet in length (0.5 to 1 m) and proportionally less wide. The Flatback turtle is found solely on the northerncoast of Australia."; julia> split_sentences(text) 3-element Array{SubString{String},1}: "The leatherback sea turtle is the largest, measuring six or seven feet (2 m) in length at maturity, and three to five feet (1 to 1.5 m) in width, weighing up to 2000 pounds (about900 kg). " "Most other species are smaller, being two to four feet in length (0.5 to 1 m) and proportionally less wide. " "The Flatback turtle is found solely on the northern coast of Australia." julia> tokenize.(split_sentences(text)) 3-element Array{Array{SubString{String},1},1}: SubString{String}["The", "leatherback", "sea", "turtle", "is", "the", "largest", ",", "measuring", "six" тАж "up", "to", "2000", "pounds", "(", "about", "900", "kg", ")", "."] SubString{String}["Most", "other", "species", "are", "smaller", ",", "being", "two", "to", "four" тАж "0.5", "to", "1", "m", ")", "and", "proportionally", "less", "wide", "."] SubString{String}["The", "Flatback", "turtle", "is", "found", "solely", "on", "the", "northern", "coast", "of", "Australia", "."]
:
- Poorman's tokenizer тАФ . ,
split
. - Punctuation space tokenize тАФ . , .
- Penn Tokenizer тАФ , Penn Treebank.
- Improved Penn Tokenizer тАФ , NLTK.
- NLTK Word tokenizer тАФ , NLTK, , UNICODE- .
- Reversible Tokenizer тАФ , .
- TokTok Tokenizer тАФ , .
- Tweet Tokenizer тАФ , , , HTML- .
set_tokenizer(nltk_word_tokenize)
Embeddings.jl
Embeddings.jl . , , , , , , . Word2Vec. , : king - man + woman = queen
. , , . , , , Wikipedia, . , . ┬лsemantic space┬╗, , ┬лsemantic distance┬╗. , , , ┬л┬╗ ┬л┬╗ . , , , .
, ┬лembedding┬╗ , , , . , , , , , , . , -, . , . , . .
Embeddings.jl : Word2Vec, GloVe (English only), FastText. . , , . тАФ , . , , word2vec, 8-16 . , .
, , DataDeps.jl . , (" "). , Embedding.jl , , . , .
ENV["DATADEPS_ALWAYS_ACCEPT"] = true
тАФ . ~/.julia/datadeps
.
. тАФ :
using Embeddings const embtable = load_embeddings(Word2Vec)
тАФ :
julia> get_embedding("blue") 300-element Array{Float32,1}: 0.01540828 0.03409082 0.0882124 0.04680265 -0.03409082 ...
WordTokenizers TextAnalysis, . , Julia:
julia> a = rand(5) 5-element Array{Float64,1}: 0.012300397820243392 0.13543646950484067 0.9780602985106086 0.24647179461578816 0.18672770774122105 julia> b = ones(5) 5-element Array{Float64,1}: 1.0 1.0 1.0 1.0 1.0 julia> a+b 5-element Array{Float64,1}: 1.0123003978202434 1.1354364695048407 1.9780602985106086 1.2464717946157882 1.186727707741221
Clustering.jl. , тАФ . MLJ.jl. , https://github.com/JuliaStats/Distances.jl , :
- Euclidean distance
- Squared Euclidean distance
- Periodic Euclidean distance
- Cityblock distance
- Total variation distance
- Jaccard distance
- Rogers-Tanimoto distance
- Chebyshev distance
- Minkowski distance
- Hamming distance
- Cosine distance
- Correlation distance
- Chi-square distance
- Kullback-Leibler divergence
- Generalized Kullback-Leibler divergence
- R├йnyi divergence
- Jensen-Shannon divergence
- Mahalanobis distance
- Squared Mahalanobis distance
- Bhattacharyya distance
- Hellinger distance
- Haversine distance
- Mean absolute deviation
- Mean squared deviation
- Root mean squared deviation
- Normalized root mean squared deviation
- Bray-Curtis dissimilarity
- Bregman divergence
.
Transformers.jl тАФ Julia ┬лTransformers┬╗, BERT Google. , NER тАФ , .
Transformers.jl Flux.jl , , , Julia- , . Flux.jl CPU GPU, , , , .
BERT , . :
using Transformers using Transformers.Basic using Transformers.Pretrain using Transformers.Datasets using Transformers.BidirectionalEncoder using Flux using Flux: onehotbatch, gradient import Flux.Optimise: update! using WordTokenizers ENV["DATADEPS_ALWAYS_ACCEPT"] = true const FromScratch = false
vectorize
. :
using Distances x1 = vectorize("Some test about computers") x2 = vectorize("Some test about printers") cosine_dist(x1, x2)
, wordpiece
, tokenizer
тАФ . 12 тАФ . 768 тАФ . . https://chengchingwen.imtqy.com/Transformers.jl/dev/pretrain/ . , Transformers.Pretrain.@pretrain_str, pretrain"model-description:item"
.
, , Transformers.jl , .
рдирд┐рд╖реНрдХрд░реНрд╖
, , Julia . . , , . , Julia , . , Julia.
, , , - ┬л┬╗, . , , ┬лopen source┬╗ , , , . , , Julia . , Jupyter Notebook , , тАФ Atom/Juno, VS Code, . , , Julia тАФ 2-3 , ( , , ), C++ .
, , Julia, -, . , , , , . , 2-3 , , . Julia . - , for
. тАФ ┬л ┬╗. , C, . Julia, , - , , тАФ Julia-. , Julia тАФ , .
, , Julia . , , .
, - Julia тАФ @JuliaLanguage, .
рд╕рдВрджрд░реНрдн