Category Archives: Linguagem

Contando palavras no SQL Server

Hoje precisei executar uma consulta no SQL Server que me retornasse a quantidade de palavras de uma coluna, agrupado pela palavra.

Utilizei a consulta abaixo para fazer o serviço sujo:


WITH Num1 (n) AS (SELECT 1 UNION ALL SELECT 1),
Num2 (n) AS (SELECT 1 FROM Num1 AS X, Num1 AS Y),
Num3 (n) AS (SELECT 1 FROM Num2 AS X, Num2 AS Y),
Num4 (n) AS (SELECT 1 FROM Num3 AS X, Num3 AS Y),
Nums (n) AS (SELECT ROW_NUMBER() OVER(ORDER BY n) FROM Num4),
Words (word) AS (
SELECT SUBSTRING(' ' + descr + ' ', n + 1, 
       CHARINDEX(' ', ' ' + descr + ' ', n + 1) - n - 1)
FROM Nums
JOIN (SELECT text FROM TweetMessages) AS F(descr)
  ON SUBSTRING(' ' + descr + ' ', n, 1 ) = ' '
 AND n < LEN(' ' + descr + ' '))
SELECT word, COUNT(*) AS cnt 
FROM Words
GROUP BY word
ORDER BY cnt DESC

Não é uma maravilha de performance, mas é bem útil!

O resultado da consulta:
twitterCount

Baixando o conteúdo de uma URL no PowerShell

Hoje precisei programar um job no SQL Server para baixar um arquivo de um site usando o powershell.

O script que eu utilizei foi esse:


$fileName = "c:\temp\file.zip"
$webclient = New-Object System.Net.WebClient
$webclient.DownloadFile("http://siteparabaixararquivo/arquivo",$fileName)

Um script muito simples que as vezes poder ser útil.

Indexando e buscando documentos com Lucene.Net e LINQ

Código de exemplo:


using System;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.IO;
using Lucene.Net.Store;
using Lucene.Net.Linq;
using Lucene.Net.Linq.Mapping;
using Lucene.Net.Analysis.Standard;

namespace LuceneTests
{
    [TestClass]
    public class LuceneTest
    {
        [TestMethod]
        public void TestIndex()
        {
            // Configura o Lucene.
            var luceneDir = Path.Combine(System.Environment.CurrentDirectory, 
                "lucene_index");

            if (!System.IO.Directory.Exists(luceneDir))
            {
                lock (this)
                {
                    System.IO.Directory.CreateDirectory(luceneDir);
                }
            }

            var directory = FSDirectory.Open(new DirectoryInfo(luceneDir));
            var provider = new LuceneDataProvider(directory, 
                Lucene.Net.Util.Version.LUCENE_30);

            // Indexa os Documentos.
            using (var session = provider.OpenSession<Document>())
            {
                session.Add(new Document()
                {
                    Title = "Hello",
                    Content = "Hello Lucene!"
                });

                session.Add(new Document()
                {
                    Title = "Hi",
                    Content = "Hi, Lucene!"
                });
            }


            // Busca os documentos que contém a palavra "Hello" no título.
            var items = provider.AsQueryable<Document>()
                .Where(l => l.Title.Contains("Hello"));

            Assert.AreNotEqual(items.Count(), 0);
        }
    }
    class Document
    {
        [Field(Analyzer = typeof(StandardAnalyzer))]
        public String Title { get; set; }

        [Field(Analyzer = typeof(StandardAnalyzer))]
        public String Content { get; set; }
    }
}