我有一个简短的函数,通过将它与Natural Language Toolkit中的WordNet语料库进行比较来检查单词是否是真正的单词.我从一个验证txt文件的线程调用此函数.当我运行我的代码时,第一次调用该函数时,它会抛出带有消息的AttributeError
"'WordNetCorpusReader' object has no attribute '_LazyCorpusLoader__args'"
Run Code Online (Sandbox Code Playgroud)
当我暂停执行时,同一行代码不会引发错误,因此我假设在我第一次调用时尚未加载语料库导致错误.
我曾尝试使用nltk.wordnet.ensure_loaded()强制加载语料库,但我仍然得到同样的错误.
这是我的功能:
from nltk.corpus import wordnet as wn
from nltk.corpus import stopwords
from nltk.corpus.reader.wordnet import WordNetError
import sys
cachedStopWords = stopwords.words("english")
def is_good_word(word):
word = word.strip()
if len(word) <= 2:
return 0
if word in cachedStopWords:
return 0
try:
wn.ensure_loaded()
if len(wn.lemmas(str(word), lang='en')) == 0:
return 0
except WordNetError as e:
print "WordNetError on concept {}".format(word)
except AttributeError as e:
print "Attribute error on concept {}: {}".format(word, e.message) …Run Code Online (Sandbox Code Playgroud) 我正在使用NLTK处理从PDF文件中提取的一些文本.我可以完整地恢复文本,但是有很多实例没有捕获单词之间的空格,所以我得到的单词ifI不是代替if I,thatposition而是代替that position或andhe's代替and he's.
我的问题是:如何使用NLTK查找它无法识别/未学习的单词,并查看是否存在更可能发生的"附近"单词组合?有没有更优雅的方式来实现这种检查,而不是简单地通过无法识别的单词,一次一个字符,拆分它,并查看它是否产生两个可识别的单词?
我有一个数据集如下:
"485","AlterNet","Statistics","Estimation","Narnia","Two and half men"
"717","I like Sheen", "Narnia", "Statistics", "Estimation"
"633","MachineLearning","AI","I like Cars, but I also like bikes"
"717","I like Sheen","MachineLearning", "regression", "AI"
"136","MachineLearning","AI","TopGear"
Run Code Online (Sandbox Code Playgroud)
等等
我想找出最常出现的单词对,例如
(Statistics,Estimation:2)
(Statistics,Narnia:2)
(Narnia,Statistics)
(MachineLearning,AI:3)
Run Code Online (Sandbox Code Playgroud)
这两个词可以是任何顺序,也可以是彼此之间的任何距离
有人可以在python中提出可能的解决方案吗?这是一个非常大的数据集.
任何建议都非常感谢
所以这是我在@ 275365的建议后尝试的
@ 275365我尝试从文件中读取输入以下内容
def collect_pairs(file):
pair_counter = Counter()
for line in open(file):
unique_tokens = sorted(set(line))
combos = combinations(unique_tokens, 2)
pair_counter += Counter(combos)
print pair_counter
file = ('myfileComb.txt')
p=collect_pairs(file)
Run Code Online (Sandbox Code Playgroud)
文本文件与原始文件具有相同的行数,但在特定行中只有唯一的标记.我不知道我做错了什么,因为当我运行它时,它会将字母分成字母,而不是将输出作为单词的组合.当我运行此文件时,它会输出拆分字母而不是预期的单词组合.我不知道我在哪里弄错了.
经过相当广泛的搜索后,我注意到很多人都很难找到一个回答这个问题的从头到尾的指南.(至少有一个问题指出存在一个解决方案,但是提出的解决方案并没有解决这样一个事实,即默认情况下,RODBC尝试针对iODBC进行编译,而iostBC并未包含在Yosemite中.)我刚刚完成了这个过程,所以我以为我会在这里记录它,希望它会使其他人受益.我正在连接到SQL Server数据库.
最近我有人向我询问有关在迭代时更改列表的失礼.他们提出了以下场景(我现在用更好的例子更新了)作为可能的用例,当时可能需要这样做:
>>> jersey_numbers = [4, 2, 3, 5, 1] # list of places in a race
>>> for jersey_number in jersey_numbers:
if jersey_number == 2: # disqualify jersey number 2 for a false start
t.remove(jersey_number)
>>> t
[4, 3, 5, 1] # jersey number 3 is now in second place
Run Code Online (Sandbox Code Playgroud)
这种行为是否足够常规用于诸如此类的用例?
我正在使用python 3.4并且只是学习基础知识,所以请耐心等待..
listA = [1,2]
for a in listA:
listA.remove(a)
print(listA)
Run Code Online (Sandbox Code Playgroud)
假设我得到一个空列表,但我得到的是一个值为'2'的列表.我用大号调试代码.列表中的值以及列表具有单个元素时for循环退出.为什么最后一个元素没有从列表中删除..?
在网页中,这呈现为
状态:我
如何在 django 模板中显示长名称“Initiated”?
在我的模板中
<p>Status: {{ transaction.status }}</p>
Run Code Online (Sandbox Code Playgroud)
模型.py
class Transaction(models.Model):
creator = models.SlugField()
amount = models.DecimalField(max_digits= 999,decimal_places =2,null= True,default=0)
accepted_by = models.SlugField()
oferto_slug = models.SlugField()
STATUSES = (
('i', 'Initiated'),
('a', 'Accepted'),
('d', 'Delivered'),
('c', 'Cancelled'),
)
status = models.CharField(choices=STATUSES, default='i',max_length=10)
views.py
def __init__():
self.state = 'i'
Run Code Online (Sandbox Code Playgroud) 1<assume tab here>Algebra I<assume tab here>START
1.1 What are the Basic Numbers? 1-1
Run Code Online (Sandbox Code Playgroud)
对于上面两行中的每一行,我如何正则表达式只匹配包括"?"在内的数字.从本质上讲,我想要以下几组:
["1", "Algebra I"]
["1.1", "What are the Basic Numbers?"]
Run Code Online (Sandbox Code Playgroud)
匹配所有内容,包括问号,或最多为"制表符".如何使用单个正则表达式执行此操作?
python ×7
nltk ×2
attributes ×1
django ×1
exception ×1
list ×1
macos ×1
ocr ×1
osx-yosemite ×1
python-2.7 ×1
python-3.x ×1
regex ×1
rodbc ×1
split ×1
tokenize ×1
unixodbc ×1
word-count ×1