2013-08-03 47 views
2

我正在構建一個應用程序,用於下載句子併爲文字遊戲解析它們。我事先不知道文字將包含哪些標點符號。Ruby中未知標點符號的字符串分割

我希望能夠分割句子/ s,檢查它們的詞性標記,如果找到正確的標記,請將其替換爲" ",然後按順序重新加入它們。

text = "some string, with punctuation- for example: things I don't know about, that may or may not have  whitespaces and random characters % !!" 

我怎樣才能把它分解成一個數組,這樣我可以越過每一個單詞的語法分析器,爲了歸隊他們,銘記string.split(//)似乎需要知道我在尋找什麼標點符號對於?

+0

爲什麼你必須重新加入他們?爲什麼不使用原始字符串?或者你在做某種轉變? –

+0

你能解釋一下你的意思是「詞性標籤」嗎? –

+0

當您在做出所需更改後重新組合這個句子時,是否需要保留關於該句子的所有其他內容,包括特定的空白? –

回答

6

split在您可以更容易地描述分隔符而非要提取的部分時非常有用。就你而言,你可以更容易地描述要提取的部分而不是分隔符,在這種情況下,scan更適合。使用split是錯誤的決定。你應該scan

text.scan(/[\w']+/) 
# => ["some", "string", "with", "punctuation", "for", "example", "things", "I", "don't", "know", "about", "that", "may", "or", "may", "not", "have", "whitespaces", "and", "random", "characters"] 

如果要更換比賽,甚至有更多的理由不使用split。在這種情況下,您應該使用gsub

text.gsub(/[\w']+/) do |word| 
if word.is_of_certain_part_of_speech? 
    "___" # Replace it with `"___"`. 
else 
    word # Put back the original word. 
end 
end 
+0

這是一個有用的步驟。我最好如何保留原始字符串中的標點符號和空格以將它們連接在一起?創建一個字典,將原始單詞與標點符號和空白字符映射到新的單詞列表中(從而只替換被轉換的單詞)。 –