从句子中提取艺术家和歌曲标题的技巧?

时间:2015-11-25 18:58:38

标签: javascript string parsing delimited-text

对于上下文,我要做的是创建一个小的webapp,您可以在其中粘贴Reddit讨论线程,并将线程中引用的歌曲名称转换为Spotify播放列表。

我正试图找出一种从某种自然语言中提取艺术家/歌曲名称的方法,格式为“artist - song name”或“songname by artist”。

所以,例如,假设我有以下字符串:

The Funeral by the Band of Horses is my favorite song.

you should check out the Acoustic version of Foo Fighters - Everlong.

Eminem- Stan. Not a fan of rap but I like this song.

结果输出为:

["The Funeral", "the Band of Horses"],
["Foo Fighters", "Everlong"],
["Eminem", "Stan"]

由于没有办法知道什么是艺术家与没有API调用的歌曲是什么,它们不需要以任何特定的方式存储,我只需要将艺术家和歌曲名称分成不同的数组部分

这是否可以在没有任何分隔符的情况下指示歌曲名称的结尾?

这是我到目前为止所做的......(半伪代码):

delimiters = [" - ", "-", " by ",];
strings = [
    "The Funeral by the Band of Horses is my favorite song.",
    "you should check out the Acoustic version of Foo Fighters - Everlong.",
    "Eminem- Stan. Not a fan of rap but I like this song."
];
// loop over each string
for (var i=0; i<strings.length; i++ ) {
    // loop through each delimiter possibility
    for (var d=0; d<delimiters.length; d++) {
        if ( strings[i].indexOf(delimiters[d]) > -1 ) {
            // we have a delimiter match
            // now figure out how to get the stuff on either side...
        }
    }
}

2 个答案:

答案 0 :(得分:0)

有一个有趣的文本解析库:Knwl.js。 Knwl.js似乎没有用于解析艺术家或歌曲的插件,但它似乎应该易于实现。请参阅:plugin development

答案 1 :(得分:0)

那么,如果你正在使用自然语言,那么你如何区分乐队/艺术家名称与其他提及相同的词语。

可以有数以万计的方法来建立一个句子,你必须抓住所有可能的。

另一种方法是对数据库以字面和多字的方式检查字符串,数据库存储艺术家和乐队的名字。

否则你肯定会错过文中的一些名字。