python - 多语言文本语料库的词干提取
问题描述
我有一个带有英语、俄语和波兰语项目描述的文本语料库。
这个文本语料库有 68K 观察。其中一些观察是用英语写的,一些是用俄语写的,还有一些是用波兰语写的。
您能告诉我在这种情况下如何正确且经济高效地实施词干提取吗?我不能在俄语单词上使用英语词干分析器,反之亦然。
不幸的是,我找不到好的语言标识符。例如langdetect
,工作太慢而且经常不正确。例如,我尝试识别英语单词“today”的语言:
detect("today")
"so"
# i.e Somali
到目前为止,我的代码实现看起来很糟糕。我只是在另一个上使用一个词干分析器:
import nltk
# polish stemmer
from pymorfologik import Morfologik
clean_items = []
# create stemmers
snowball_en = nltk.SnowballStemmer("english")
snowball_ru = nltk.SnowballStemmer("russian")
stemmer_pl = Morfologik()
# loop over each item; create an index i that goes from 0 to the length
# of the item list
for i in range(0, num_items):
# Call our function for each one, and add the result to the list of
# clean items
cleaned = items.iloc[i]
# to word stem
clean_items.append(snowball_ru.stem(stemmer_pl(snowball_en.stem(cleaned))))
解决方案
即使 API 不是那么好,您也可以将langdetect
自己限制为仅使用您实际使用的语言。例如:
from langdetect.detector_factory import DetectorFactory, PROFILES_DIRECTORY
import os
def get_factory_for(langs):
df = DetectorFactory()
profiles = []
for lang in ['en', 'ru', 'pl']:
with open(os.path.join(PROFILES_DIRECTORY, lang), 'r', encoding='utf-8') as f:
profiles.append(f.read())
df.load_json_profile(profiles)
def _detect_langs(text):
d = df.create()
d.append(text)
return d.get_probabilities()
def _detect(text):
d = df.create()
d.append(text)
return d.detect()
df.detect_langs = _detect_langs
df.detect = _detect
return df
虽然不受限制langdetect
似乎认为"today"
是索马里语,但如果您只有英语、俄语和波兰语,您现在可以这样做:
df = get_factory_for(['en', 'ru', 'pl'])
df.detect('today') # 'en'
df.detect_langs('today') # [en:0.9999988994459187]
它仍然会错过很多("snow"
显然是波兰语),但它仍然会大大降低您的错误率。
推荐阅读
- firebase - 无法在 /v1/projects:migrateToFirebaseProject 创建 firebase 项目错误
- python - 从维基百科刮取种族
- spring-cloud - LocalDeployer:应用工作目录
- python-3.x - python中的DNS缓存中毒
- asp.net-mvc-4 - 如何在 IIS 10 上运行 ASP.Net MVC 4 应用程序
- javascript - 为什么 onClick 不适用于我的按钮?
- java - 如何计算消耗的杯子数量并将消耗的总水量存储在数组中?
- python - 使用元类作为它自己的子类的 __metaclass__
- mysql - 传感器时间戳数据表中的 MySQL 查询时间太长
- c++ - 如何在 Visual Studio C++ 中的 Intellisense 自动完成方法名称后自动插入括号