New and Changed:
- Refactored and expanded text preprocessing functionality (PR #253)
- Moved code from a top-level
preprocess module into a preprocessing sub-package, and reorganized it in the process
- Added new functions:
replace_hashtags() to replace hashtags like #FollowFriday or #spacyIRL2019 with _TAG_
replace_user_handles() to replace user handles like @bjdewilde or @spacy_io with _USER_
replace_emojis() to replace emoji symbols like 😉 or 🚀 with _EMOJI_
normalize_hyphenated_words() to join hyphenated words back together, like antici- pation => anticipation
normalize_quotation_marks() to replace "fancy" quotation marks with simple ascii equivalents, like “the god particle” => "the god particle"
- Changed a couple functions for clarity and consistency:
replace_currency_symbols() now replaces all dedicated ascii and unicode currency symbols with _CUR_, rather than just a subset thereof, and no longer provides for replacement with the corresponding currency code (like $ => USD)
remove_punct() now has a fast (bool) kwarg rather than method (str)
- Removed
normalize_contractions(), preprocess_text(), and fix_bad_unicode() functions, since they were bad/awkward and more trouble than they were worth
- Refactored and expanded keyterm extraction functionality (PR #257)
- Moved code from a top-level
keyterms module into a ke sub-package, and cleaned it up / standardized arg names / better shared functionality in the process
- Added new unsupervised keyterm extraction algorithms: YAKE (
ke.yake()), sCAKE (ke.scake()), and PositionRank (ke.textrank(), with non-default parameter values)
- Added new methods for selecting candidate keyterms: longest matching subsequence candidates (
ke.utils.get_longest_subsequence_candidates()) and pattern-matching candidates (ke.utils.get_pattern_matching_candidates())
- Improved speed of SGRank implementation, and generally optimized much of the code
- Improved document similarity functionality (PR #256)
- Added a character ngram-based similarity measure (
similarity.character_ngrams()), for something that's useful in different contexts than the other measures
- Removed Jaro-Winkler string similarity measure (
similarity.jaro_winkler()), since it didn't add much beyond other measures
- Improved speed of Token Sort Ratio implementation
- Replaced
python-levenshtein dependency with jellyfish, for its active development, better documentation, and actually-compliant license
- Added customizability to certain functionality
- Added options to
Doc._.to_bag_of_words() and Corpus.word_counts() for filtering out stop words, punctuation, and/or numbers (PR #249)
- Allowed for objects that look like
sklearn-style topic modeling classes to be passed into tm.TopicModel() (PR #248)
- Added options to customize rc params used by
matplotlib when drawing a "termite" plot in viz.draw_termite_plot() (PR #248)
- Removed deprecated functions with direct replacements:
io.utils.get_filenames() and spacier.components.merge_entities()
Contributors:
Huge thanks to @kjoshi and @zf109 for the PRs! 🙌