open System
// [snippet:Html formatting functions]
open System.Text.RegularExpressions
let removeTagsAndReplaceWords text =
[
".*?http.*?" , "url" // replace verbose url to "url"
"<.*?>" , "" // remove html tags
"F#" , "F sharp"
]
|> Seq.fold (fun input (pattern,replacement) ->
Regex.Replace(input,pattern,replacement)) text
open System.Web
/// unescape some escaped characters
let unescapeHtml text = HttpUtility.HtmlDecode text
/// do all formatting operations
let formatHtml text =
text
|> removeTagsAndReplaceWords
|> unescapeHtml
//[/snippet]
//[snippet:Get text to speech]
//TODO: please rewrite the below reference to your HtmlAgilityPack.dll
#r @"C:\Users\nagat01\Documents\Visual Studio 11\Projects\WebTrawler\packages\HtmlAgilityPack.1.4.3\lib\HtmlAgilityPack.dll"
open HtmlAgilityPack
/// this xpath specifies the text to speech
let xpath =
"""
//div[@id="question-header"]//a
| //div[@class="post-text"]//p
| //div[@class="user-details"]//a
| //span[@class="comment-copy"]
| //a[@class="comment-user"]
"""
let getTextToSheech url =
let htmlDocument = HtmlWeb().Load(url)
htmlDocument.DocumentNode.SelectNodes xpath
|> Seq.map(fun node -> node.InnerHtml |> formatHtml)
|> String.concat "\n"
//[/snippet]
//[snippet:Usage]
#r "System.Speech"
open System.Speech.Synthesis
let speech url =
let text = getTextToSheech url
printfn "%s" text
use speechSynthesizer = new SpeechSynthesizer(Rate= -3)
speechSynthesizer.Speak text
let url = "http://stackoverflow.com/questions/181613/hidden-features-of-f"
speech url
//[/snippet]