Perl,1.38865
我认为我应该继续并发表自己的意见,希望它能刺激竞争。它的得分1.38605
意味着它通常偏离3.999
(我的停顿点)。我没有使用任何机器学习库,只是直接使用了Perl。它确实需要访问字典;我从这里用的那个。
请随意使用我程序中的一些数字/统计信息。
use strict;
my %dict;
my $dictname = "dict.txt";
open(my $dfh, '<', $dictname);
while (my $row = <$dfh>) {
chomp $row;
$dict{lc $row} = 1;
}
my $domain = <>;
chomp($domain);
my $guess = 1;
if($domain =~ /^[a-z]*$/){
my @bylength = (200000,20001,401,45,45,41,26,26,26,26,26,24);
if(length($domain) < ~~@bylength+2){
$guess *= $bylength[length($domain)-2];
} else {
$guess *= 18;
}
} elsif ($domain =~ /^[0-9]*$/){
my @bylength = (300000,30001,6000,605,50);
if(length($domain) < ~~@bylength+2){
$guess *= $bylength[length($domain)-2];
} else {
$guess *= 7;
}
} elsif ($domain =~ /^[a-z0-9]*$/){
my @bylength = (52300,523,28);
if(length($domain) < ~~@bylength+2){
$guess *= $bylength[length($domain)-2];
} else {
$guess *= 23;
}
} else {
my @bylength = (50000,500,42,32,32,31);
if(length($domain) < ~~@bylength+2){
$guess *= $bylength[length($domain)-2];
} else {
$guess *= 12;
}
}
my $wordfact = 1;
my $leftword = 0;
for(my $i = 1; $i <= length($domain); $i++){
my $word = substr $domain, 0, $i;
if(exists($dict{$word})){
$leftword = $i;
}
}
$wordfact *= ($leftword/length($domain))**2 * 0.8 + ($leftword/length($domain)) * -0.1 + 0.9;
if($leftword/length($domain) >= 0.8){
$wordfact *= 2.4;
}
my $rightword = 0;
for(my $i = 1; $i <= length($domain); $i++){
my $word = substr $domain, length($domain)-$i, $i;
if(exists($dict{$word})){
$rightword = $i;
}
}
$wordfact *= ($rightword/length($domain))**2 * 0.9 + ($rightword/length($domain)) * -0.2 + 1;
$guess *= $wordfact;
my $charfact = 1;
my %charfacts = (
i => 1.12, #500
l => 0.84,
s => 1.09,
a => 0.94,
r => 1.03,
o => 0.97,
c => 1.22, #400
d => 0.88,
u => 1.07,
t => 0.95,
e => 1.08,
m => 0.91, #300
p => 1.08,
y => 0.92,
g => 0.97,
ne => 0.56, #100
n => 1.13,
z => 0.67,
re => 1.30,
es => 0.75,
);
while(my ($key,$value) = each %charfacts){
if($domain =~ /$key/){
$charfact *= $value;
}
}
$guess *= $charfact;
$guess = int($guess + 0.5);
if($guess <= 0){
$guess = 1;
}
print $guess;
这是我的评分程序制作的图表,显示了实际价格评估的散点图和误差的直方图。在散点图中,.:oO@
平均10, 20, 30, 40, 50
点分别在该点上。在直方图中,每个O
代表16个域。
比例尺设置为1 character width = e^(1/3)
。
该程序有三个主要步骤。每个步骤的结果相乘。
按角色类别和长度分类。它确定域是全部字母,所有数字,字母和数字,还是包含连字符。然后,它给出一个由域长度确定的数值。我发现长度5周围的值有一个奇怪的下降。我怀疑这是由于采样所致:较短的域因其长度而有价值(即使字母是无用的),而大多数较长的域往往是单词/短语。为了防止过度拟合,我对域进行了限制,即不能因域较短而受到惩罚(因此长度5至少与长度6一样好)。
单词内容的评估。我使用字典来确定域名中左手词和右手词的长度。例如,myawesomesite -> my & site -> 2 & 4
。然后,我尝试根据这些词在域名中所占的比例来进行调整。较低的值通常表示域不包含单词,包含字典中未包含的经过复数/修饰的单词,包含由其他字符包围的单词(虽然我尝试不做任何改进,但未检测到内部单词),或包含多字词组。高值表示它是一个单词,或者可能是两个单词的短语。
字符内容的评估。我寻找了许多域中包含的子字符串,这些子字符串似乎会影响域的值。我认为,这是由于某些原因,某些类型的字词更受欢迎/更具吸引力所致。例如,该字母i
出现在大约一半的域(其中的741个)中,平均将域名价值提高了约12%。这不是过拟合;那里有些真实的东西,我不太了解。该字母l
出现在514个域中,系数为0.84。一些不太常见的字母/有向图,例如ne
出现125次且真的很低的系数0.56,可能会过拟合。
为了改进该程序,我可能需要使用某种机器学习。另外,我可以寻找长度,单词内容和字符内容之间的关系,以找到更好的方法将这些单独的结果组合到总体评估值中。