我有来自数千个网站的原始内容(文本和HTML标记)。最终目标是探索topic modeling和clustering。有很多例子说明如何使用Python过滤掉非英语单词,但不幸的是,大部分内容并不适用于我正在使用的语料库。原因如下:
.in
顶级域名),仍然有可能从该网站提取的文档将包含英文这就是为什么以下帖子在我的案例中不起作用的原因:
In python, extracting non-English words是一个好的开始,特别是因为它还删除了标点符号,但它仍然包含非英语单词:
import pandas as pd
from pandas import Series, DataFrame
In [1]: test_str = Series(['中', 'hello','زندگی','Yo!','かたて く範囲','+44 designer','{{appDetails.title}} {{"TERM','The Pen Company ✒',np.nan,' Shopping Cart:0 Log In/Register'])
In [2]: test_str.str.findall('[^\W]+')
Out [2]:
0 [中]
1 [hello]
2 [زندگی]
3 [Yo]
4 [かたて, く範囲]
5 [44, designer]
6 [appDetails, title, TERM]
7 [The, Pen, Company]
8 NaN
9 [Shopping, Cart, 0, Log, In, Register]
dtype: object
Extract non-content English language words string - python更多的是关于使用停止词,我已经计划使用,例如:
from nltk.corpus import stopwords
english_stops = stopwords.words('english')
vect = CountVectorizer(max_features=10000,max_df=.2,stop_words=english_stops)
这里有一种可能性...... Python NLTK显示了创建list of all English-language words:
的示例wordlist = [w for w in nltk.corpus.words.words('en') if w.islower()]
然后可以用来过滤令牌......但是,给定的数据量似乎是次优选项。类似的方法是Removing non-english words from a sentence in python或dropping row containing non-english words in pandas dataframe,但同样,使用英语词典逐字逐句匹配似乎过分。
来自notebook demonstrating clustering的示例函数也允许使用非英语语言。
def tokenize_only(text):
# first tokenize by sentence, then by word to ensure that punctuation is caught as it's own token
tokens = [word.lower() for sent in nltk.sent_tokenize(text) for word in nltk.word_tokenize(sent)]
filtered_tokens = []
# filter out any tokens not containing letters (e.g., numeric tokens, raw punctuation)
for token in tokens:
if re.search('[a-zA-Z]', token):
filtered_tokens.append(token)
return filtered_tokens
在这种情况下,像Etusivu
这样的芬兰语单词会通过过滤器。
理想情况下,任何解决方案都不会采用检查语料库中每个单词的方法;话虽如此,我对其他经验丰富的人开放(包括逐字检查): - )