【发布时间】:2018-07-04 17:38:00
【问题描述】:
我对 Python 很陌生,很抱歉我不知道。例如,我想创建一个表格,其中行是文档,列是标签。如果您愿意,可以提供文档特征矩阵。每个标签代表任意数量的单词(通常是 1、2 或 3 个单词)。它们存储在字典中:
regexDict =
{u'item_4278': [u'occupational', u'position', u'job'],
u'item_4279': [u'job', u'blue', u'collar'],
u'item_4276': [u'job', u'civil', u'service'],
...}
现在,我有许多文档(在 df 中表示为字符串),我想了解一个标签中的单词在文档中出现的频率。
以下:
df =
doc text
doc1 My job is in civil service. I love my job blabla civil bla bla service bla.
doc2 My job is in civil service. It is a job that you call blue collar.
doc3 This is a document completely unrelated to the items.
我想计算文档中值彼此接近的次数,例如我创建的这个正则表达式:
occupational\W+(?:\w+\W+){0,3}?position\W+(?:\w+\W+){0,3}?job\W+(?:\w+\W+){0,3}?
期望的输出:
item_4278 item_4279 item_4276
Doc 1 0 0 2
Doc 2 0 1 1
Doc 3 0 0 0
编辑:如果文档中只有 1 或 2 个单词出现,它应该得到 0 分。重要的是所有单词都出现在文档中! :) 有点接近,我的意思是如果它说“这是一个文本。这些句子不包含有趣的词。我的工作是公务员。前一句确实包含有趣的词”,'工作'' Civil' 和 'service' 在整个文档中看起来非常接近,因此该文档的 item_4276 得分为 1。
目前,我得到的只有这个,但还远远不能令人满意:
testdic = {
'item_1': r'occupational\W+(?:\w+\W+){0,3}?position\W+(?:\w+\W+){0,3}?job\W+(?:\w+\W+){0,3}?',
'item_2': r'job\W+(?:\w+\W+){0,3}?blue\W+(?:\w+\W+){0,3}?collar\W+(?:\w+\W+){0,3}?',
'item_3': r'job\W+(?:\w+\W+){0,3}?civil\W+(?:\w+\W+){0,3}?service\W+(?:\w+\W+){0,3}?'
}
total = []
for key, item in testdic.iteritems():
series = df.text.str.count(item)
series = series.rename(key)
total.append(series)
total2 = pd.concat(total, axis=1)
最后,我想用分数过滤矩阵,使每个文档的计数仅在 5-10 之间。 总而言之,写得很紧凑(但显然不能正常工作:-)):
def interesting_items(doc, regexDict):
for value in regexDict.values():
df.loc[df['doc'] == doc, 'text'].iloc[0].str.count(value)
return count per regexDict.keys() if count > 5 and count < 10
【问题讨论】:
-
您似乎在使用
pandas,您可能需要对其进行标记,以便熊猫用户提供更好的帮助。 :) -
我会的,非常感谢您的帮助。它在我的思考过程和学习如何使用 SO 方面帮助了我很多:-)
-
所有项目(如蓝色、衣领和工作)都应该出现在文档中吗?如果 3 个单词中只有 2 个出现怎么办?还有你说的“有点接近”是什么意思?
-
如果文档中只有 1 或 2 个单词出现,它应该得到 0 分。重要的是所有单词都出现在文档中! :) 有点接近,我的意思是如果它说“这是一个文本。这些句子不包含有趣的词。我的工作是公务员。前一句确实包含有趣的词”,'工作'' Civil' 和 'service' 在整个文档中看起来非常接近,因此该文档的 item_4276 得分为 1。
-
你可能想看看这个。这甚至可能是重复的:stackoverflow.com/questions/17573814/…
标签: python pandas dictionary feature-extraction