我需要在许多句子中找到一个单词的第一个字符。所有的句子都有某种形式的“猜想”一词,即猜想、猜想等。但是我不能像这样在“查找”中使用通配符
firstSpace = mySentence.find('conjecture'*,0)
句子看起来像:
'There is considerable conjecture and debate as to how...'
'He conjectured that the interface was...'
有什么想法我该怎么做?谢谢!
我需要在许多句子中找到一个单词的第一个字符。所有的句子都有某种形式的“猜想”一词,即猜想、猜想等。但是我不能像这样在“查找”中使用通配符
firstSpace = mySentence.find('conjecture'*,0)
句子看起来像:
'There is considerable conjecture and debate as to how...'
'He conjectured that the interface was...'
有什么想法我该怎么做?谢谢!
您可以先尝试删除特殊字符:
x = '“ There is considerable conjecture and debate as to how...
newx = ''.join(e for e in x.lower() if e.isalnum())
print newx
>>> 'thereisconsiderableconjectureanddebateastohow'
然后使用find
来定位您的单词。
祝你好运!
编辑:
如果要查找指定单词之前的单词,可以拆分句子。这是一段可能有帮助的代码:
paragraph = 'The quick brown fox jumps over the lazy dog. I have two big dogs. Furry Dogs are the best. $%^Dogs love me.'
paragraph = ''.join(e for e in paragraph.lower() if e.isalnum() or e.isspace() or e=='.')
sentence_list = paragraph.split('.')
prev_word_list = []
for sentence in sentence_list:
word_list = sentence.split()
prev_word = ''
for i,word in enumerate(word_list):
if i == 0:
pass
else:
if 'dog' in word.lower():
prev_word = word_list[i-1]
prev_word_list.append(prev_word)
这给出了:
>>> print prev_word_list
>>> ['lazy', 'big', 'furry']
所有句子都有某种形式的“猜想”一词,即猜想、猜想等。
word in string
其他答案中显示的方法通常会失败,例如,他们不会community
在包含其中的句子中找到单词communities
。
在这种情况下,您可能需要一个词干算法,例如nltk.stem
package提供的:
from nltk.stem.snowball import EnglishStemmer
from nltk import word_tokenize
stemmer = EnglishStemmer()
stem_word = stemmer.stem
stem = stem_word(u"conjecture")
sentence = u'He conjectured that the interface was...'
words = word_tokenize(sentence)
found_words = [(i, w) for i, w in enumerate(words) if stem_word(w) == stem]
# -> [(1, u'conjectured')]
nltk中还有其他 stem 和tokenize 方法,您可以根据您的确切需要使用它们。
但是有些词以讨厌的字符开头:“或类似..我怎样才能摆脱它们?
“讨厌的字符”是错误地将utf-8
字节序列视为的结果cp1252
:
>>> utf8bytes = u"microsoft smart quote (\u201c)".encode('utf-8')
>>> print utf8bytes.decode('cp1252')
microsoft smart quote (“)
>>> print utf8bytes.decode('utf-8')
microsoft smart quote (“)
您不应该盲目删除乱码文本,而是修复字符编码。
为什么#AskObama 推文在屏幕上出现乱码:了解您的 UTF-8、Unicode、ASCII 和 ANSI 解码总统先生在电视上展示了一个关于此问题的公开示例。
忘记实际上在后台完成的隐式工作,这至少会实现您要求的任务(希望如此)。
unicodedata.normalize('NFKD', mySentence).encode('ascii', 'ignore').lower().find("conjecture")
好吧,老实说,我希望正则表达式可以为您设置线性搜索,但是 unicode 值通常会分成两个“字符”。
相反,这是一个至少可以完成工作的 hack:
newSentence = ""
for i in range(0, len(mySentence)):
if ord(mySentence[i]) > 128:
newSentence += '_'
else:
newSentence += mySentence[i]
newSentence.encode("UTF-8").lower().find("conjecture")
如果您想忘记那些讨厌的编码字符:
mySentence.decode("ascii", "ignore").encode("UTF-8").lower().find("conjecture")
Sample input: >>> newStr = "“32f fWF 3(*&(%FJ conJectuRe€@!O".decode("ascii", "ignore").encode("UTF-8").lower()
>>> print newStr
>>> print newStr.find("conjecture")
Output: '32f fwf 3(*&(%fj conjecture@!o'
20