Pergunta

Trending Topics do Twitter, muitas vezes consistem em mais do que apenas uma palavra. Mas para termos compostas muitas vezes há diferentes formas de ortografia, p.ex.:.

"Enigma do Príncipe" / "Enigma do Príncipe"

Para encontrar todas as atualizações mencionando um Trending Topic, você precisa de todas as formas de ortografia. Twitter faz isso:

do Twitter Trending Topics admin

Você tem o nome do tópico à esquerda e as diferentes formas de grafias à direita. Você acha que isso é feito manualmente ou automaticamente? É possível fazer isso automaticamente? Se sim: Como

Eu espero que você possa me ajudar. Agradecemos antecipadamente!

Foi útil?

Solução 2

Vou tentar responder a minha pergunta com base em quebrado o comentário de Link (obrigado por esta):


Você extraído frases que consistem em 1 a 3 palavras a partir de seu banco de dados de documentos. Entre essas frases extraced existem as seguintes frases:

  • Half Blood Prince
  • Half-Blood Prince
  • halfblood Príncipe

Para cada frase, você tira todos os caracteres especiais e espaços em branco e fazer a minúscula string:

$ frase = 'Enigma do Príncipe'; $ Frase = preg_replace ( '/ [^ A-Z] / i', '', $ frase); $ Frase = strtolower ($ frase); // resultado é "halfbloodprince"

Quando você tiver feito isso, todos os 3 frases (veja acima) tem uma ortografia comum:

  • Half Blood Prince => halfbloodprince
  • Enigma do Príncipe => halfbloodprince
  • halfblood Príncipe => halfbloodprince

Assim, "halfbloodprince" é a frase pai. Você insere tanto em seu banco de dados, a frase normal e a frase pai.

Para mostrar uma "Trending Topics Admin" como o Twitter é que você faça o seguinte:

// first select the top 10 parent phrases
$sql1 = "SELECT parentPhrase, COUNT(*) as cnt FROM phrases GROUP BY parentPhrase ORDER BY cnt DESC LIMIT 0, 10";
$sql2 = mysql_query($sql1);
while ($sql3 = mysql_fetch_assoc($sql2)) {
    $parentPhrase = $sql3['parentPhrase'];
    $childPhrases = array(); // set up an array for the child phrases
    $fifthPart = round($sql3['cnt']*0.2);
    // now select all child phrases which make 20% of the parent phrase or more
    $sql4 = "SELECT phrase FROM phrases WHERE parentPhrase = '".$sql3['parentPhrase']."' GROUP BY phrase HAVING COUNT(*) >= ".$fifthPart;
    $sql5 = mysql_query($sql4);
    while ($sql6 = mysql_fetch_assoc($sql5)) {
        $childPhrases[] = $sql3['phrase'];
    }
    // now you have the parent phrase which is on the left side of the arrow in $parentPhrase
    // and all child phrases which are on the right side of the arrow in $childPhrases
}

É isso que você pensou, Ligação quebrada? Será que este trabalho?

Outras dicas

O que você basicamente quer é encontrar a semelhança href="https://stackoverflow.com/questions/1034622/how-can-i-measure-the-similarity-between-2-strings"> .

Eu acho que a Soundex algoritmo é o que você está procurando. Ele pode ser usado para comparar cordas com base em como eles som. Ou como wiki descreve:

Soundex é um algoritmo fonético para indexar nomes pelo som, como pronunciado em Inglês. O objetivo é que homophones a ser codificado para a mesma representação, para que possam ser combinados apesar pequenas diferenças de ortografia.

E:

Usando este algoritmo [EDIT: isto é, "rating" palavras de uma letra e três dígitos], tanto "Robert" e "Rupert" retornar o mesmo string "R163", enquanto "Rubin" yields "R150". "Ashcraft" yields "A261".

Há também a distância Levenshtein .

Boa sorte.

Existem muitas maneiras de fazer isso. Um artigo simples e direta sobre o estilo google "você quis dizer" verificação é uma boa leitura de ideias sobre como conseguir isso. escrito por Peter Norvig, diretor de pesquisa do Google.

http://norvig.com/spell-correct.html

"anderstornvig" mencionou o / distância de edição Levenshtein, que é uma ótima idéia, mas não é bastante apropriado porque certas permutações são mais significativas do que outras permutações. O problema parece ser que nós estamos usando um monte de conhecimento de domínio específico quando determinar quais diferenças são "significativa" e que são "insignificantes". Por exemplo, sabemos que o hífen em "Enigma do Príncipe" é muito importante, mas o número em "Firefox 3" é muito importante.

Por esta razão, você pode considerar a personalização de uma métrica simples, como Levenshtein. Adicionar parâmetros que permitem personalizar quais tipos de diferenças são importantes e que tipos não são importantes.

Em particular, Levenshtein conta o número de "edições" (isto é, inserções, deleções e substituições) necessárias para transformar uma corda para outro. Efetivamente, pesa cada editar o mesmo. Você poderia escrever uma implementação que pesos algumas edições de forma diferente. Por exemplo, alterar um "-" para um "" deve ter um peso muito baixo (indicando unimportance). A alteração de um "3" para um "2", quando o número é por si só, deve ter um peso muito alta (indicando alta importância).

Ao parametrizar o cálculo, você cria uma avenida para melhorar continuamente o seu algoritmo. Construir uma configuração inicial e executá-lo em alguns dados de teste. Encontrar lugares onde a métrica é fraco - onde se funde dois termos que você acha que devem ser separados, por exemplo -. E modificar a parametrização até que você esteja satisfeito

Desta forma, você pode treinar seu algoritmo usando o seu conhecimento de domínio específico.

O mais provável é que eles têm alguns sistemas automáticos que sugerem prováveis ??candidatos para combinar, e, em seguida, um ser humano faz a escolha final para combiná-los. Pode haver alguma eles combinam automaticamente.

  • Sua sugestão de remover espaços e outros sinais de pontuação é uma boa. O mais provável é que eles combinam coisas que só diferem na pontuação ou espaço em branco sozinho automaticamente.
  • Plural vs. singular: procurando essas diferenças seria fácil para automatizar e produziria prováveis ??candidatos para combinar.
  • erros ortográficos comuns - há são bancos de dados de erros ortográficos comuns. Eles podem até contar com a API do Google para sugestões de ortografia (eu acho que eles expor isso).
  • Soundex (ou similar) é uma boa para encontrar erros de ortografia, mas seria necessidade de ir primeiro através do acima de dois filtros (espaços remover, pontuação e plurais) e, em seguida, provavelmente precisa de um humano para fazer a chamada se eles são os mesmos. Mas se você pudesse apresentar uma gráfica representação mostrando o agrupamento com o mesmo ou similar soundex então você iria realmente fazer a parte fácil. Você poderia enviar automaticamente uma notificação quando um cluster começa a aparecer ea tendência (eles realmente só se preocupam com os trending topics de qualquer maneira, por isso, se até mesmo um combinado de um cluster não está tendendo eles podem esperar para examiná-lo.)

Onde você realmente precisa de um ser humano a passo para é quando há apelidos comuns. Como Michael Jackson, MJ, Michael, etc. Ou MacDonalds, McD, Micky-D do, etc. E então, com técnica você tem Visual Studio, VS2008, VS, etc. ou StackOverflow, SO, etc. Em seguida, C #, C-Sharp, C # .NET são todos iguais, mas C e C ++ são diferentes.

Por isso, seria necessário uma combinação. Pode contar com uma base de dados de variações conhecidas e combinação com base na análise anterior ou outras fontes, mas esse banco de dados será mantido regularmente por um editor.

Assumindo que os trending topics são gerados computacionalmente, o algoritmo exato fazê-lo no Twitter será difícil de adivinhar. O mais provável é altamente confidencial e patenteada, bem como (tão assustador como pode parecer aos algoritmos de patente).

acho que é razoável acreditar que embora eles usam algum tipo de algoritmo de linguagem natural. Dependendo do caso, eles são muitas vezes muito pesado para realizar computacionalmente e só vai fazer o que quiser, de certa forma.

Uma leitura útil óbvia sobre o assunto é de wiki:

Boa sorte.

Eu me lembro quando MJ morreu, twitter voltou manualmente e fixa os temas a ponto da tweets de sua morte. Seria pedir muito de um computador nos dias de hoje para fazer algo como isso automaticamente, embora possa livremente ser feito.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top