ksatvat / EXTRACTOR

GNU General Public License v3.0
73 stars 24 forks source link

Suggest to loosen the dependency on textblob #6

Open Agnes-U opened 2 years ago

Agnes-U commented 2 years ago

Hi, your project EXTRACTOR requires "textblob==0.15.3" in its dependency. After analyzing the source code, we found that the following versions of textblob can also be suitable without affecting your project, i.e., textblob 0.9.0, 0.9.1, 0.10.0, 0.11.0, 0.11.1, 0.12.0, 0.13.0, 0.13.1, 0.14.0, 0.15.0, 0.15.1, 0.15.2, 0.16.0, 0.17.0, 0.17.1. Therefore, we suggest to loosen the dependency on textblob from "textblob==0.15.3" to "textblob>=0.9.0,<=0.17.1" to avoid any possible conflict for importing more packages or for downstream projects that may use EXTRACTOR.

May I pull a request to further loosen the dependency on textblob?

By the way, could you please tell us whether such dependency analysis may be potentially helpful for maintaining dependencies easier during your development?



We also give our detailed analysis as follows for your reference:

Your project EXTRACTOR directly uses 1 APIs from package textblob.

textblob.blob.TextBlob.__init__

Beginning from the 1 APIs above, 5 functions are then indirectly called, including 5 textblob's internal APIs and 0 outsider APIs. The specific call graph is listed as follows (neglecting some repeated function occurrences).

[/ksatvat/EXTRACTOR]
+--textblob.blob.TextBlob.__init__
|      +--textblob.blob.BaseBlob.__init__
|      |      +--textblob.utils.lowerstrip
|      |      |      +--textblob.utils.strip_punc
|      |      +--textblob.blob._initialize_models
|      |      |      +--textblob.blob._validated_param

We scan textblob's versions and observe that during its evolution between any version from [0.9.0, 0.9.1, 0.10.0, 0.11.0, 0.11.1, 0.12.0, 0.13.0, 0.13.1, 0.14.0, 0.15.0, 0.15.1, 0.15.2, 0.16.0, 0.17.0, 0.17.1] and 0.15.3, the changing functions (diffs being listed below) have none intersection with any function or API we mentioned above (either directly or indirectly called by this project).

diff: 0.15.3(original) 0.9.0
['textblob.classifiers.DecisionTreeClassifier', 'textblob.ordereddict.OrderedDict.__ne__', 'textblob.blob.WordList.__str__', 'textblob.classifiers.BaseClassifier.extract_features', 'textblob.classifiers.BaseClassifier', 'textblob.blob.Word.translate', 'textblob.compat.with_metaclass', 'textblob.en.sentiments.PatternAnalyzer.analyze', 'textblob.en.taggers.NLTKTagger.tag', 'textblob.ordereddict.OrderedDict.__iter__', 'textblob.blob.WordList.__setitem__', 'textblob.blob.BaseBlob.pos_tags', 'textblob.blob.BaseBlob.sentiment_assessments', 'textblob.blob.WordList.stem', 'textblob.translate.Translator.detect', 'textblob.translate.Translator.translate', 'textblob.exceptions.NotTranslated', 'textblob._text._read', 'textblob.classifiers.DecisionTreeClassifier.pprint', 'textblob.blob.BaseBlob.ngrams', 'textblob.blob.BaseBlob.translate', 'textblob.classifiers.NLTKClassifier.update', 'textblob.blob.WordList', 'textblob.blob.WordList.append', 'textblob.ordereddict.OrderedDict.__eq__', 'textblob.ordereddict.OrderedDict.__reduce__', 'textblob.blob.Blobber', 'textblob.blob.WordList.__iter__', 'textblob.base.BaseTagger', 'textblob.translate.Translator._get_json5', 'textblob.ordereddict.OrderedDict.__reversed__', 'textblob.en.inflect.singularize', 'textblob.translate.Translator._request', 'textblob.translate.Translator._get_language_from_json5', 'textblob.en.taggers.NLTKTagger', 'textblob.blob.WordList.__getitem__', 'textblob.blob.WordList.__getslice__', 'textblob.en.taggers.PatternTagger', 'textblob.blob.BaseBlob', 'textblob.en.taggers.PatternTagger.tag', 'textblob.blob.BaseBlob.correct', 'textblob.ordereddict.OrderedDict.__init__', 'textblob.ordereddict.OrderedDict.copy', 'textblob._text.Sentiment.__call__', 'textblob.classifiers.basic_extractor', 'textblob.base.BaseTagger.tag', 'textblob.en.sentiments.PatternAnalyzer', 'textblob.blob.WordList.__init__', 'textblob.blob.Word', 'textblob.blob.WordList.extend', 'textblob.blob.Word.stem', 'textblob.ordereddict.OrderedDict', 'textblob.blob.WordList.__repr__', 'textblob.classifiers.NLTKClassifier.accuracy', 'textblob.tokenizers.SentenceTokenizer', 'textblob.blob.TextBlob', 'textblob.translate._calculate_tk', 'textblob.blob.Word.lemmatize', 'textblob.blob.Word.lemma', 'textblob.classifiers.DecisionTreeClassifier.pretty_format', 'textblob.classifiers.BaseClassifier.__init__', 'textblob._text.Sentiment', 'textblob.classifiers.NLTKClassifier', 'textblob.ordereddict.OrderedDict.__setitem__', 'textblob.ordereddict.OrderedDict.__repr__', 'textblob.blob.WordList.count', 'textblob.ordereddict.OrderedDict.clear', 'textblob.translate._unescape', 'textblob.translate.Translator._get_translation_from_json5', 'textblob.translate.Translator._validate_translation', 'textblob.translate.Translator', 'textblob.ordereddict.OrderedDict.__delitem__', 'textblob.ordereddict.OrderedDict.keys', 'textblob.ordereddict.OrderedDict.popitem', 'textblob.en.np_extractors._is_match', 'textblob.ordereddict.OrderedDict.fromkeys']

diff: 0.15.3(original) 0.9.1
['textblob.ordereddict.OrderedDict.__ne__', 'textblob.blob.WordList.__str__', 'textblob.classifiers.BaseClassifier.extract_features', 'textblob.classifiers.BaseClassifier', 'textblob.blob.Word.translate', 'textblob.compat.with_metaclass', 'textblob.en.sentiments.PatternAnalyzer.analyze', 'textblob.en.taggers.NLTKTagger.tag', 'textblob.ordereddict.OrderedDict.__iter__', 'textblob.blob.WordList.__setitem__', 'textblob.blob.BaseBlob.pos_tags', 'textblob.blob.BaseBlob.sentiment_assessments', 'textblob.blob.WordList.stem', 'textblob.translate.Translator.detect', 'textblob.translate.Translator.translate', 'textblob.exceptions.NotTranslated', 'textblob._text._read', 'textblob.blob.BaseBlob.ngrams', 'textblob.blob.BaseBlob.translate', 'textblob.classifiers.NLTKClassifier.update', 'textblob.blob.WordList', 'textblob.blob.WordList.append', 'textblob.ordereddict.OrderedDict.__eq__', 'textblob.ordereddict.OrderedDict.__reduce__', 'textblob.blob.Blobber', 'textblob.blob.WordList.__iter__', 'textblob.base.BaseTagger', 'textblob.translate.Translator._get_json5', 'textblob.ordereddict.OrderedDict.__reversed__', 'textblob.en.inflect.singularize', 'textblob.translate.Translator._request', 'textblob.translate.Translator._get_language_from_json5', 'textblob.en.taggers.NLTKTagger', 'textblob.blob.WordList.__getitem__', 'textblob.blob.WordList.__getslice__', 'textblob.en.taggers.PatternTagger', 'textblob.blob.BaseBlob', 'textblob.en.taggers.PatternTagger.tag', 'textblob.blob.BaseBlob.correct', 'textblob.ordereddict.OrderedDict.__init__', 'textblob.ordereddict.OrderedDict.copy', 'textblob._text.Sentiment.__call__', 'textblob.classifiers.basic_extractor', 'textblob.base.BaseTagger.tag', 'textblob.en.sentiments.PatternAnalyzer', 'textblob.blob.WordList.__init__', 'textblob.blob.Word', 'textblob.blob.WordList.extend', 'textblob.blob.Word.stem', 'textblob.ordereddict.OrderedDict', 'textblob.blob.WordList.__repr__', 'textblob.classifiers.NLTKClassifier.accuracy', 'textblob.tokenizers.SentenceTokenizer', 'textblob.blob.TextBlob', 'textblob.translate._calculate_tk', 'textblob.blob.Word.lemmatize', 'textblob.blob.Word.lemma', 'textblob.ordereddict.OrderedDict.__repr__', 'textblob.classifiers.BaseClassifier.__init__', 'textblob._text.Sentiment', 'textblob.classifiers.NLTKClassifier', 'textblob.ordereddict.OrderedDict.__setitem__', 'textblob.blob.WordList.count', 'textblob.ordereddict.OrderedDict.clear', 'textblob.translate._unescape', 'textblob.translate.Translator._get_translation_from_json5', 'textblob.translate.Translator._validate_translation', 'textblob.translate.Translator', 'textblob.ordereddict.OrderedDict.__delitem__', 'textblob.ordereddict.OrderedDict.keys', 'textblob.ordereddict.OrderedDict.popitem', 'textblob.en.np_extractors._is_match', 'textblob.ordereddict.OrderedDict.fromkeys']

diff: 0.15.3(original) 0.10.0
['textblob.ordereddict.OrderedDict.__ne__', 'textblob.blob.WordList.__str__', 'textblob.classifiers.BaseClassifier.extract_features', 'textblob.classifiers.BaseClassifier', 'textblob.blob.Word.translate', 'textblob.en.sentiments.PatternAnalyzer.analyze', 'textblob.en.taggers.NLTKTagger.tag', 'textblob.ordereddict.OrderedDict.__iter__', 'textblob.blob.WordList.__setitem__', 'textblob.blob.BaseBlob.pos_tags', 'textblob.blob.BaseBlob.sentiment_assessments', 'textblob.blob.WordList.stem', 'textblob.translate.Translator.detect', 'textblob.translate.Translator.translate', 'textblob._text._read', 'textblob.blob.BaseBlob.ngrams', 'textblob.blob.BaseBlob.translate', 'textblob.classifiers.NLTKClassifier.update', 'textblob.blob.WordList', 'textblob.blob.WordList.append', 'textblob.ordereddict.OrderedDict.__eq__', 'textblob.ordereddict.OrderedDict.__reduce__', 'textblob.blob.Blobber', 'textblob.blob.WordList.__iter__', 'textblob.base.BaseTagger', 'textblob.translate.Translator._get_json5', 'textblob.en.inflect.singularize', 'textblob.translate.Translator._request', 'textblob.translate.Translator._get_language_from_json5', 'textblob.en.taggers.NLTKTagger', 'textblob.blob.WordList.__getitem__', 'textblob.blob.WordList.__getslice__', 'textblob.en.taggers.PatternTagger', 'textblob.blob.BaseBlob', 'textblob.en.taggers.PatternTagger.tag', 'textblob.blob.BaseBlob.correct', 'textblob.ordereddict.OrderedDict.__init__', 'textblob.ordereddict.OrderedDict.copy', 'textblob._text.Sentiment.__call__', 'textblob.classifiers.basic_extractor', 'textblob.base.BaseTagger.tag', 'textblob.en.sentiments.PatternAnalyzer', 'textblob.blob.WordList.__init__', 'textblob.blob.Word', 'textblob.blob.WordList.extend', 'textblob.blob.Word.stem', 'textblob.ordereddict.OrderedDict', 'textblob.blob.WordList.__repr__', 'textblob.classifiers.NLTKClassifier.accuracy', 'textblob.tokenizers.SentenceTokenizer', 'textblob.blob.TextBlob', 'textblob.translate._calculate_tk', 'textblob.blob.Word.lemmatize', 'textblob.blob.Word.lemma', 'textblob.ordereddict.OrderedDict.__repr__', 'textblob.classifiers.BaseClassifier.__init__', 'textblob._text.Sentiment', 'textblob.classifiers.NLTKClassifier', 'textblob.ordereddict.OrderedDict.__setitem__', 'textblob.blob.WordList.count', 'textblob.ordereddict.OrderedDict.clear', 'textblob.translate._unescape', 'textblob.translate.Translator._get_translation_from_json5', 'textblob.translate.Translator._validate_translation', 'textblob.translate.Translator', 'textblob.translate.Translator._translation_successful', 'textblob.ordereddict.OrderedDict.__delitem__', 'textblob.ordereddict.OrderedDict.keys', 'textblob.ordereddict.OrderedDict.popitem', 'textblob.ordereddict.OrderedDict.__reversed__', 'textblob.ordereddict.OrderedDict.fromkeys']

diff: 0.15.3(original) 0.11.0
['textblob.ordereddict.OrderedDict.__ne__', 'textblob.blob.WordList.__str__', 'textblob.classifiers.BaseClassifier.extract_features', 'textblob.classifiers.BaseClassifier', 'textblob.blob.Word.translate', 'textblob.en.sentiments.PatternAnalyzer.analyze', 'textblob.en.taggers.NLTKTagger.tag', 'textblob.ordereddict.OrderedDict.__iter__', 'textblob.blob.WordList.__setitem__', 'textblob.blob.BaseBlob.pos_tags', 'textblob.blob.BaseBlob.sentiment_assessments', 'textblob.blob.WordList.stem', 'textblob.translate.Translator.detect', 'textblob.translate.Translator.translate', 'textblob._text._read', 'textblob.blob.BaseBlob.ngrams', 'textblob.blob.BaseBlob.translate', 'textblob.classifiers.NLTKClassifier.update', 'textblob.blob.WordList', 'textblob.blob.WordList.append', 'textblob.ordereddict.OrderedDict.__eq__', 'textblob.ordereddict.OrderedDict.__reduce__', 'textblob.blob.WordList.__iter__', 'textblob.base.BaseTagger', 'textblob.translate.Translator._get_json5', 'textblob.translate.Translator._request', 'textblob.translate.Translator._get_language_from_json5', 'textblob.en.taggers.NLTKTagger', 'textblob.blob.WordList.__getitem__', 'textblob.blob.WordList.__getslice__', 'textblob.en.taggers.PatternTagger', 'textblob.blob.BaseBlob', 'textblob.en.taggers.PatternTagger.tag', 'textblob.blob.BaseBlob.correct', 'textblob.ordereddict.OrderedDict.__init__', 'textblob.ordereddict.OrderedDict.copy', 'textblob._text.Sentiment.__call__', 'textblob.classifiers.basic_extractor', 'textblob.base.BaseTagger.tag', 'textblob.en.sentiments.PatternAnalyzer', 'textblob.blob.WordList.__init__', 'textblob.blob.Word', 'textblob.blob.WordList.extend', 'textblob.blob.Word.stem', 'textblob.ordereddict.OrderedDict', 'textblob.blob.WordList.__repr__', 'textblob.classifiers.NLTKClassifier.accuracy', 'textblob.tokenizers.SentenceTokenizer', 'textblob.translate._calculate_tk', 'textblob.blob.Word.lemmatize', 'textblob.blob.Word.lemma', 'textblob.ordereddict.OrderedDict.__repr__', 'textblob.classifiers.BaseClassifier.__init__', 'textblob._text.Sentiment', 'textblob.classifiers.NLTKClassifier', 'textblob.ordereddict.OrderedDict.__setitem__', 'textblob.blob.WordList.count', 'textblob.ordereddict.OrderedDict.clear', 'textblob.translate._unescape', 'textblob.translate.Translator._get_translation_from_json5', 'textblob.translate.Translator._validate_translation', 'textblob.translate.Translator', 'textblob.translate.Translator._translation_successful', 'textblob.ordereddict.OrderedDict.__delitem__', 'textblob.ordereddict.OrderedDict.keys', 'textblob.ordereddict.OrderedDict.popitem', 'textblob.ordereddict.OrderedDict.__reversed__', 'textblob.ordereddict.OrderedDict.fromkeys']

diff: 0.15.3(original) 0.11.1
['textblob.ordereddict.OrderedDict.__ne__', 'textblob.blob.WordList.__str__', 'textblob.classifiers.BaseClassifier.extract_features', 'textblob.classifiers.BaseClassifier', 'textblob.en.sentiments.PatternAnalyzer.analyze', 'textblob.en.taggers.NLTKTagger.tag', 'textblob.ordereddict.OrderedDict.__iter__', 'textblob.blob.WordList.__setitem__', 'textblob.blob.BaseBlob.pos_tags', 'textblob.blob.BaseBlob.sentiment_assessments', 'textblob.blob.WordList.stem', 'textblob.translate.Translator.detect', 'textblob.translate.Translator.translate', 'textblob._text._read', 'textblob.blob.BaseBlob.ngrams', 'textblob.classifiers.NLTKClassifier.update', 'textblob.blob.WordList', 'textblob.blob.WordList.append', 'textblob.ordereddict.OrderedDict.__eq__', 'textblob.ordereddict.OrderedDict.__reduce__', 'textblob.blob.WordList.__iter__', 'textblob.base.BaseTagger', 'textblob.en.taggers.NLTKTagger', 'textblob.blob.WordList.__getitem__', 'textblob.blob.WordList.__getslice__', 'textblob.en.taggers.PatternTagger', 'textblob.blob.BaseBlob', 'textblob.en.taggers.PatternTagger.tag', 'textblob.blob.BaseBlob.correct', 'textblob.ordereddict.OrderedDict.__init__', 'textblob.ordereddict.OrderedDict.copy', 'textblob._text.Sentiment.__call__', 'textblob.classifiers.basic_extractor', 'textblob.base.BaseTagger.tag', 'textblob.en.sentiments.PatternAnalyzer', 'textblob.blob.WordList.__init__', 'textblob.blob.Word', 'textblob.blob.WordList.extend', 'textblob.blob.Word.stem', 'textblob.ordereddict.OrderedDict', 'textblob.blob.WordList.__repr__', 'textblob.classifiers.NLTKClassifier.accuracy', 'textblob.tokenizers.SentenceTokenizer', 'textblob.translate._calculate_tk', 'textblob.blob.Word.lemmatize', 'textblob.blob.Word.lemma', 'textblob.ordereddict.OrderedDict.__repr__', 'textblob.classifiers.BaseClassifier.__init__', 'textblob._text.Sentiment', 'textblob.classifiers.NLTKClassifier', 'textblob.ordereddict.OrderedDict.__setitem__', 'textblob.blob.WordList.count', 'textblob.ordereddict.OrderedDict.clear', 'textblob.translate._unescape', 'textblob.translate.Translator', 'textblob.ordereddict.OrderedDict.__delitem__', 'textblob.ordereddict.OrderedDict.keys', 'textblob.ordereddict.OrderedDict.popitem', 'textblob.ordereddict.OrderedDict.__reversed__', 'textblob.ordereddict.OrderedDict.fromkeys']

diff: 0.15.3(original) 0.12.0
['textblob.blob.WordList.__str__', 'textblob.classifiers.BaseClassifier.extract_features', 'textblob.classifiers.BaseClassifier', 'textblob.en.sentiments.PatternAnalyzer.analyze', 'textblob.en.taggers.NLTKTagger.tag', 'textblob.blob.BaseBlob.pos_tags', 'textblob.blob.WordList.__setitem__', 'textblob.blob.BaseBlob.sentiment_assessments', 'textblob._text._read', 'textblob.classifiers.NLTKClassifier.update', 'textblob.blob.WordList', 'textblob.blob.WordList.append', 'textblob.blob.WordList.__iter__', 'textblob.base.BaseTagger', 'textblob.en.taggers.NLTKTagger', 'textblob.blob.WordList.__getitem__', 'textblob.blob.WordList.__getslice__', 'textblob.en.taggers.PatternTagger', 'textblob.blob.BaseBlob', 'textblob.en.taggers.PatternTagger.tag', 'textblob.blob.BaseBlob.correct', 'textblob._text.Sentiment.__call__', 'textblob.classifiers.basic_extractor', 'textblob.base.BaseTagger.tag', 'textblob.en.sentiments.PatternAnalyzer', 'textblob.blob.WordList.__init__', 'textblob.blob.Word', 'textblob.blob.WordList.extend', 'textblob.blob.WordList.__repr__', 'textblob.classifiers.NLTKClassifier.accuracy', 'textblob.tokenizers.SentenceTokenizer', 'textblob.blob.Word.lemmatize', 'textblob.blob.Word.lemma', 'textblob.classifiers.BaseClassifier.__init__', 'textblob._text.Sentiment', 'textblob.classifiers.NLTKClassifier', 'textblob.blob.WordList.count', 'textblob.translate._unescape']

diff: 0.15.3(original) 0.13.0
['textblob.blob.WordList.__str__', 'textblob.classifiers.BaseClassifier', 'textblob.en.sentiments.PatternAnalyzer.analyze', 'textblob.en.taggers.NLTKTagger.tag', 'textblob.blob.BaseBlob.pos_tags', 'textblob.blob.WordList.__setitem__', 'textblob.blob.BaseBlob.sentiment_assessments', 'textblob._text._read', 'textblob.blob.WordList', 'textblob.blob.WordList.append', 'textblob.blob.WordList.__iter__', 'textblob.base.BaseTagger', 'textblob.en.taggers.NLTKTagger', 'textblob.blob.WordList.__getitem__', 'textblob.blob.WordList.__getslice__', 'textblob.en.taggers.PatternTagger', 'textblob.blob.BaseBlob', 'textblob.en.taggers.PatternTagger.tag', 'textblob.blob.BaseBlob.correct', 'textblob._text.Sentiment.__call__', 'textblob.classifiers.basic_extractor', 'textblob.base.BaseTagger.tag', 'textblob.en.sentiments.PatternAnalyzer', 'textblob.blob.WordList.__init__', 'textblob.blob.Word', 'textblob.blob.WordList.extend', 'textblob.blob.WordList.__repr__', 'textblob.classifiers.NLTKClassifier.accuracy', 'textblob.tokenizers.SentenceTokenizer', 'textblob.blob.Word.lemmatize', 'textblob.blob.Word.lemma', 'textblob.classifiers.BaseClassifier.__init__', 'textblob._text.Sentiment', 'textblob.classifiers.NLTKClassifier', 'textblob.blob.WordList.count', 'textblob.translate._unescape']

diff: 0.15.3(original) 0.13.1
['textblob.blob.WordList.__str__', 'textblob.classifiers.BaseClassifier', 'textblob.en.sentiments.PatternAnalyzer.analyze', 'textblob.en.taggers.NLTKTagger.tag', 'textblob.blob.BaseBlob.pos_tags', 'textblob.blob.WordList.__setitem__', 'textblob.blob.BaseBlob.sentiment_assessments', 'textblob._text._read', 'textblob.blob.WordList', 'textblob.blob.WordList.append', 'textblob.blob.WordList.__iter__', 'textblob.base.BaseTagger', 'textblob.en.taggers.NLTKTagger', 'textblob.blob.WordList.__getitem__', 'textblob.blob.WordList.__getslice__', 'textblob.en.taggers.PatternTagger', 'textblob.blob.BaseBlob', 'textblob.en.taggers.PatternTagger.tag', 'textblob.blob.BaseBlob.correct', 'textblob.blob.WordList.__init__', 'textblob.classifiers.basic_extractor', 'textblob.base.BaseTagger.tag', 'textblob.en.sentiments.PatternAnalyzer', 'textblob.blob.Word', 'textblob.blob.WordList.extend', 'textblob.blob.WordList.__repr__', 'textblob.tokenizers.SentenceTokenizer', 'textblob.blob.Word.lemmatize', 'textblob.blob.Word.lemma', 'textblob.classifiers.BaseClassifier.__init__', 'textblob.blob.WordList.count', 'textblob.translate._unescape']

diff: 0.15.3(original) 0.14.0
['textblob.blob.WordList.__str__', 'textblob.classifiers.BaseClassifier', 'textblob.en.sentiments.PatternAnalyzer.analyze', 'textblob.blob.BaseBlob.pos_tags', 'textblob.blob.WordList.__setitem__', 'textblob.blob.BaseBlob.sentiment_assessments', 'textblob._text._read', 'textblob.blob.WordList', 'textblob.blob.WordList.append', 'textblob.blob.WordList.__iter__', 'textblob.blob.WordList.__getitem__', 'textblob.blob.WordList.__getslice__', 'textblob.blob.BaseBlob', 'textblob.blob.BaseBlob.correct', 'textblob.blob.WordList.__init__', 'textblob.classifiers.basic_extractor', 'textblob.en.sentiments.PatternAnalyzer', 'textblob.blob.Word', 'textblob.blob.WordList.extend', 'textblob.blob.WordList.__repr__', 'textblob.tokenizers.SentenceTokenizer', 'textblob.blob.Word.lemmatize', 'textblob.blob.Word.lemma', 'textblob.classifiers.BaseClassifier.__init__', 'textblob.blob.WordList.count', 'textblob.translate._unescape']

diff: 0.15.3(original) 0.15.0
['textblob.blob.WordList.__str__', 'textblob.blob.BaseBlob.pos_tags', 'textblob.blob.WordList.__setitem__', 'textblob._text._read', 'textblob.blob.WordList', 'textblob.blob.WordList.append', 'textblob.blob.WordList.__iter__', 'textblob.blob.WordList.__getitem__', 'textblob.blob.WordList.__getslice__', 'textblob.blob.BaseBlob', 'textblob.blob.BaseBlob.correct', 'textblob.blob.WordList.__init__', 'textblob.blob.Word', 'textblob.blob.WordList.extend', 'textblob.blob.WordList.__repr__', 'textblob.tokenizers.SentenceTokenizer', 'textblob.blob.Word.lemmatize', 'textblob.blob.Word.lemma', 'textblob.blob.WordList.count']

diff: 0.15.3(original) 0.15.1
['textblob.blob.BaseBlob', 'textblob.blob.BaseBlob.correct', 'textblob.blob.WordList.__str__', 'textblob.blob.WordList', 'textblob.blob.WordList.append', 'textblob.blob.WordList.__init__', 'textblob.blob.WordList.count', 'textblob.blob.BaseBlob.pos_tags', 'textblob.blob.WordList.__iter__', 'textblob.blob.WordList.__setitem__', 'textblob.blob.WordList.extend', 'textblob.blob.WordList.__repr__', 'textblob.tokenizers.SentenceTokenizer', 'textblob._text._read', 'textblob.blob.WordList.__getitem__', 'textblob.blob.WordList.__getslice__']

diff: 0.15.3(original) 0.15.2
['textblob.blob.BaseBlob', 'textblob.tokenizers.SentenceTokenizer', 'textblob.blob.BaseBlob.correct', 'textblob.blob.BaseBlob.pos_tags']

diff: 0.15.3(original) 0.16.0
['textblob.blob.BaseBlob.translate', 'textblob.blob.BaseBlob', 'textblob.blob.Word.translate', 'textblob.blob.Word', 'textblob.blob.BaseBlob.detect_language', 'textblob.blob.Word.detect_language']

diff: 0.15.3(original) 0.17.0
['textblob.blob.BaseBlob.translate', 'textblob.blob.BaseBlob', 'textblob._text.Sentiment', 'textblob._text.Sentiment.__call__', 'textblob.blob.Word.translate', 'textblob.blob.Word', 'textblob.blob.BaseBlob.detect_language', 'textblob.translate.Translator.detect', 'textblob.translate.Translator', 'textblob.translate.Translator.translate', 'textblob.blob.Word.detect_language', 'textblob.translate._calculate_tk']

diff: 0.15.3(original) 0.17.1
['textblob.blob.BaseBlob.translate', 'textblob.blob.BaseBlob', 'textblob._text.Sentiment', 'textblob._text.Sentiment.__call__', 'textblob.blob.Word.translate', 'textblob.blob.Word', 'textblob.blob.BaseBlob.detect_language', 'textblob.translate.Translator.detect', 'textblob.translate.Translator', 'textblob.translate.Translator.translate', 'textblob.blob.Word.detect_language', 'textblob.translate._calculate_tk']

Therefore, we believe that it is quite safe to loose your dependency on textblob from "textblob==0.15.3" to "textblob>=0.9.0,<=0.17.1". This will improve the applicability of EXTRACTOR and reduce the possibility of any further dependency conflict with other projects.